2013-03-08 151 views

回答

821

git stash pop应用它后扔掉的(最上面的,默认情况下)藏匿,而git stash apply它保留在可能的以后再使用藏匿列表(或者你可以再git stash drop它)。发生这种情况除非git stash pop之后有冲突,在这种情况下,它不会删除存储,其行为完全像git stash apply

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

+67

作为@ briankip的答案下面的注释,如果存在冲突时弹出存储器,弹出不会删除存储器(并将表现完全像应用) – Kashif 2014-11-20 22:56:25

+1

@John Zwinck最后一行更清晰,谢谢 – Suresh 2015-10-30 07:55:55

+0

感谢您的评论@Kashif – 2016-08-15 03:08:57

37

git stash pop应用顶部装入的元素并将其从堆栈中移除。 git stash apply也一样,但将其留在储藏箱中。

58

得到了这个有用的链接,指出了差异,正如John Zwinck指出的那样,以及Git存储流行的缺点。

例如,说你的隐藏更改与你自第一次创建隐藏以来所做的其他更改相冲突。弹出和应用都将有助于触发合并冲突解决模式,使您可以很好地解决这些冲突......并且即使您希望流行,也不会摆脱隐藏。由于很多人都认为藏獒只是一个简单的堆栈,这往往会导致他们后来不小心弹出同样的藏宝箱,因为他们认为它已经不存在了。

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

+4

这真的很有帮助。我遇到了一个冲突流行,后来,想知道为什么藏匿仍然列在藏匿名单 – Kashif 2014-11-20 22:31:32

+0

当我不小心把一个错误的分支藏在顶端时,这真的很有帮助。 – Rahi 2015-06-03 16:12:50

+1

当一个流行音乐失败时,一个藏匿的事实并不是一个缺点,尽管它起初看起来似乎是这样。 – Amalgovinus 2017-12-15 21:56:56

12

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

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

让我们修改文件并添加“世界”字符串。现在,你要移动到不同的分支来解决你刚刚发现了一个小错误,所以你需要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

相关问题