我已经使用git stash pop
很长一段时间了。我最近发现了git stash apply
命令。当我尝试它时,它似乎与git stash pop
一样。
git stash pop
和git stash apply
有什么区别?
git stash pop
在应用它之后扔掉(最上面,默认情况下)stash,而git stash apply
将它留在存储列表中以便以后重用(或者你可以git stash drop
它)。
除非在git stash pop
之后发生冲突,否则会发生这种情况,在这种情况下它不会移除存储,使其行为与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
应用顶部stashed元素并将其从堆栈中删除。 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
更像是偷看。
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()
方法联系起来,其中pop通过减量更改顶部(top = top-1)但peek()
只能获得顶部元素。
在git
stash中是一个存储区域,可以移动当前更改的文件。
当您想从stash
存储库中提取一些更改并检测到git
repo中可用的某些相互文件中的某些更改时,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
仅应用来自藏匿区域的更改,同时适用于git pop
以及从stash
区域移除更改。