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

问题描述 投票:759回答:6

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

git stash popgit stash apply有什么区别?

git git-stash
6个回答
1279
投票

git stash pop在应用它之后扔掉(最上面,默认情况下)stash,而git stash apply将它留在存储列表中以便以后重用(或者你可以git stash drop它)。

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

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


75
投票

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

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

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


51
投票

git stash pop应用顶部stashed元素并将其从堆栈中删除。 git stash apply做同样的事情,但把它放在藏匿堆栈中。


36
投票

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

假设我们正在使用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更像是偷看。


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()只能获得顶部元素。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.