git stash pop和git stash的区别适用

我使用git stash pop已经有一段时间了。我最近发现了git stash apply命令。当我尝试它时,它似乎与git stash pop的工作方式相同。

git stash popgit stash apply有什么区别?

632321 次浏览

git stash pop扔掉应用后(默认情况下,最上面的)存储,而git stash apply把它留在藏匿清单里用于以后可能的重用(或者您可以git stash drop它)。

除非在git stash pop之后存在冲突,否则会发生这种情况,在这种情况下,它不会删除存储,使其行为与git stash apply完全相同。

另一种方式来看待它:git stash popgit stash apply && git stash drop

git stash pop应用顶部隐藏的元素并将其从堆栈中删除。git stash apply也做同样的事情,但将其留在存储堆栈中。

得到了这个有用的链接,说明了差异,正如John Zwinck所说,git stash pop的缺点。

例如,假设您的隐藏更改与您自第一次创建存储以来所做的其他更改冲突。pop和应用程序都将有助于触发合并冲突解决模式,允许您很好地解决此类冲突……并且都不会摆脱存储,即使您可能也期待弹出。由于很多人希望存储只是一个简单的堆栈,这通常会导致他们后来意外弹出相同的存储,因为他们认为它已经消失了。

链接:http://codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful/

在行动中看到它可能会帮助你更好地理解差异。

假设我们正在处理master分支,并且有一个包含“Hello”字符串的文件hello.txt

让我们修改文件并添加“world”字符串。现在您想移动到另一个分支来修复刚刚找到的次要bug,因此您需要stash您的更改:

git stash

你移动到另一个分支,修复了bug现在你准备好继续处理你的master分支,所以你pop的变化:

git stash pop

现在,如果您尝试查看藏匿内容,您将获得:

$ git stash show -pNo stash found.

但是,如果你使用git stash apply,你会得到隐藏的内容,但你也会保留它:

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

所以pop就像堆栈的pop——它实际上会在弹出元素后删除元素,而apply更像peek

Git StashPop vs apply工作

如果您想将顶部隐藏的更改应用于当前的非分阶段更改并删除该存储,那么您应该选择git stash pop

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

但是,如果您想将顶部隐藏的更改应用于当前非分阶段更改而不删除它,那么您应该选择git stash apply

注意:您可以将此案例与Stack classpop()peek()方法联系起来,其中pop通过递减(top=top-1)更改top,但peek()只能获取top元素。

git藏匿中是可以移动当前更改的文件的存储区域。

当您想从git存储库中提取一些更改并检测到git存储库中可用的一些相互文件中的一些更改时,stash区域很有用。

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区域的更改。

假设不会抛出错误,并且您希望处理可用存储列表中的顶部存储项:

git stash pop=git stash apply+git stash drop

快速解答:

git stash pop->从存储列表中删除

git stash apply->保存在存储列表中