web-dev-qa-db-ja.com

Git stash popとgit stashの違いが適用されます

私はかなり前からgit stash popを使っていました。私は最近git stash applyコマンドについて知りました。試してみると、git stash popと同じように動作するようです。

git stash popgit stash applyの違いは何ですか?

754

git stash pop捨てる the(適用すると一番上の、デフォルトでは)隠しておくことができますが、git stash apply隠しリストに残すは後で使うことができます(またはgit stash dropできます)。

これは、git stash popの後に矛盾がない限り発生します。その場合は、stashは削除されず、git stash applyとまったく同じように動作します。

別の見方をすると、git stash popgit stash apply && git stash dropです。

1199
John Zwinck

John Zwinckが述べたように、そしてGit stash popの欠点を述べた、この役に立つリンクを手に入れてください。

たとえば、あなたの隠した変更が最初に隠しを作成してから行った他の変更と競合するとします。 popとapplyの両方が有益にマージ競合解消モードを起動し、そのような競合をうまく解決できるようにします…そして、おそらくあなたがポップを期待しているとしても、どちらもスタッシュを取り除くことはできません。多くの人々は、隠し場所が単純なスタックであると期待するので、彼らがそれがなくなったと思ったので、これはしばしば彼らが偶然に同じ隠し場所を飛び出させることにつながります。

リンク http://codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful/

71
briankip

git stash popは最上位の隠し要素を適用し、それをスタックから削除します。 git stash applyも同じことをしますが、スタッシュスタックに残します。

49
jchapa

実際に見てみると、違いを理解しやすくなります。

masterブランチに取り組んでいて、 "Hello"という文字列を含むファイルhello.txtがあるとします。

ファイルを修正し、それに "world"という文字列を追加しましょう。今、あなたは今見つけた小さなバグを修正するために別のブランチに移動したいと思うので、あなたは自分の変更をstashする必要があります:

git stash

もう一方のブランチに移動し、バグを修正しました。これでmasterブランチの作業を続ける準備が整いましたので、変更をpopしてください。

git stash pop

あなたが隠し場所のコンテンツを確認しようとすると今、あなたは得るでしょう:

$ git stash show -p
No stash found.

ただし、代わりにgit stash applyを使用すると、隠しコンテンツが取得されますが、それも保持されます。

$ git stash show -p
diff --git a/hello.txt b/hello.txt
index e965047..802992c 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1 +1 @@
-Hello
+Hello world

そのためpopはスタックのポップに似ています - ポップされると要素を実際に削除しますが、apply peek に似ています。

31
Maroun

Git Stash Pop vs apply Working

一番上のstashされた変更を現在のステージされていない変更に適用し、そのstashも削除したい場合は、git stash popを選択してください。

# apply the top stashed changes and delete it from git stash area.
git stash pop  

しかし、あなたが一番上に隠した変更をそれを削除せずに現在の段階的でない変更に適用したいなら、あなたはgit stash applyのために行くべきです。

注:この場合はStackクラスのpop()メソッドとpeek()メソッドに関連付けることができます。popは1ずつデクリメント(top = top-1)しますが、peek()はtop要素しか取得できません。

1
Vikrant Kashyap

git stash には、現在変更されているファイルを移動できる記憶領域があります。

stash領域は、gitレポジトリからいくつかの変更を引き出し、gitリポジトリで利用可能ないくつかの相互ファイルでいくつかの変更を検出したいときに便利です。

git stash apply //apply the changes without removing stored files from stash area.

git stash pop  // apply the changes as well as remove stored files from stash area.

注: - git applyはstash領域からの変更のみを適用し、git popstash領域からの変更の適用と削除を適用します。

0
Vikrant Kashyap