适用于git stash pop和git stash的区别

时间:2013-03-08 03:14:02

标签: git git-stash

我已经使用git stash pop很长一段时间了。我最近发现了git stash apply命令。当我尝试它时,它似乎与git stash pop一样。

git stash popgit stash apply之间的区别是什么?

8 个答案:

答案 0 :(得分:1213)

应用后,

git stash pop 抛出(默认情况下最重要)存储,而git stash apply 将其保留在存储列表中以后重用(或者你可以git stash drop)。

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

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

答案 1 :(得分:72)

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

  

例如,假设您的隐藏更改与您自首次创建存储后所做的其他更改发生冲突。 pop和apply都会有助于触发合并冲突解决模式,让你很好地解决这些冲突......并且也不会摆脱存储,即使你可能期望流行。由于很多人都认为藏匿只是一个简单的堆栈,这通常会导致他们后来意外地弹出相同的藏匿处,因为他们认为它已经消失了。

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

答案 2 :(得分:49)

git stash pop应用顶部隐藏元素并将其从堆栈中删除。 git stash apply执行相同操作,但将其保留在存储堆栈中。

答案 3 :(得分:31)

在行动中看到它可能有助于您更好地理解差异。

假设我们正在master分支上工作,并且有一个文件hello.txt,其中包含" Hello"字符串。

让我们修改文件并添加"世界"串到它。现在,您想要转移到另一个分支来修复您刚刚找到的小错误,因此您需要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

答案 4 :(得分:3)

假设不会引发任何错误,并且您要处理可用存储区列表中的顶部存储项:

setState = git stash pop + git stash apply

答案 5 :(得分:1)

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

  

注意:您可以将这种情况与Stackpop()peek()方法相关联,其中pop通过减量(top = top-1)来改变顶部,但是peek()只能获得顶部元素。

答案 6 :(得分:0)

git中,存储是一个可以移动当前已更改文件的存储区。

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仅适用于从存储区进行的更改,而git pop则适用于从stash区域进行的更改。

答案 7 :(得分:0)

快速回答:

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

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