私はgit stash pop
かなり長い間使用しています。最近git stash apply
コマンドについて知りました。試してみたところ、と同じように動作したようgit stash pop
です。
違いは何であるgit stash pop
とはgit stash apply
?
私はgit stash pop
かなり長い間使用しています。最近git stash apply
コマンドについて知りました。試してみたところ、と同じように動作したようgit stash pop
です。
違いは何であるgit stash pop
とはgit stash apply
?
回答:
git stash pop
捨てる一方で、それを適用した後(デフォルトでは、最上位の)スタッシュをgit stash apply
スタッシュリストに葉それを(その後、またはあなたができることができ、後で再利用するためgit stash drop
に)。
これはgit stash pop
、の後に競合がない限り発生します。その場合、スタッシュは削除されず、のように動作しますgit stash apply
。
それを見る別の方法:git stash pop
はgit stash apply && git stash drop
です。
git stash pop
の結果と同じであっても、競合エラーが発生するようです。
John Zwinckが述べたように、違いを示すこの役立つリンクを入手しましたgit stash pop
。
たとえば、スタッシュされた変更が、スタッシュを最初に作成してから行った他の変更と競合するとします。popとapplyはどちらもマージ競合解決モードを有効にトリガーし、そのような競合を適切に解決できるようにします。また、おそらくpopも期待しているとしても、どちらもstashを取り除くことはありません。多くの人々はスタッシュが単純なスタックであることを期待しているため、多くの場合、スタッシュはなくなったと思っていたため、後で同じスタッシュを誤ってポップすることになります。
リンク:http : //codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful/
実際に見てみると、違いを理解するのに役立ちます。
master
ブランチで作業していて、hello.txt
「Hello」文字列を含むファイルがあるとします。
ファイルを修正して、それに "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
、スタックのpopと同じです。実際には、popされると要素を削除しますが、peekのapply
ようです。
ではgit
スタッシュ現在変更されたファイルを移動することが可能な記憶領域です。
stash
areaは、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
ます。
Git Stash Pop vs apply
ワーキング
トップに隠された変更を現在の非ステージングされた変更に適用し、そのスタッシュも削除したい場合は、に進みますgit stash pop
。
# apply the top stashed changes and delete it from git stash area.
git stash pop
ただし、トップスタッシュされた変更を削除せずに現在の非ステージング変更に適用する場合は、に進みますgit stash apply
。
注:このケースを
Stack
クラスpop()
とpeek()
メソッドに関連付けることができます。ポップはトップをデクリメント(top = top-1)ずつ変更peek()
しますが、トップの要素のみを取得できます。