私はかなり前からgit stash pop
を使っていました。私は最近git stash apply
コマンドについて知りました。試してみると、git stash pop
と同じように動作するようです。
git stash pop
とgit stash apply
の違いは何ですか?
git stash pop
捨てる the(適用すると一番上の、デフォルトでは)隠しておくことができますが、git stash apply
隠しリストに残すは後で使うことができます(またはgit stash drop
できます)。
これは、git stash pop
の後に矛盾がない限り発生します。その場合は、stashは削除されず、git stash apply
とまったく同じように動作します。
別の見方をすると、git stash pop
はgit stash apply && git stash drop
です。
John Zwinckが述べたように、そしてGit stash popの欠点を述べた、この役に立つリンクを手に入れてください。
たとえば、あなたの隠した変更が最初に隠しを作成してから行った他の変更と競合するとします。 popとapplyの両方が有益にマージ競合解消モードを起動し、そのような競合をうまく解決できるようにします…そして、おそらくあなたがポップを期待しているとしても、どちらもスタッシュを取り除くことはできません。多くの人々は、隠し場所が単純なスタックであると期待するので、彼らがそれがなくなったと思ったので、これはしばしば彼らが偶然に同じ隠し場所を飛び出させることにつながります。
リンク http://codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful/
git stash pop
は最上位の隠し要素を適用し、それをスタックから削除します。 git stash apply
も同じことをしますが、スタッシュスタックに残します。
実際に見てみると、違いを理解しやすくなります。
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 に似ています。
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要素しか取得できません。
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 pop
はstash
領域からの変更の適用と削除を適用します。