git stash pop和git stash之间的区别适用


1022

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

git stash pop和之间有什么区别git stash apply

Answers:


1626

git stash pop 应用后将其丢弃(默认情况下是最顶层),而git stash apply 将其保留在存储列表中以备日后重用(或者您可以这样git stash drop做)。

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

另一种查看方式:git stash popgit stash apply && git stash drop


117
就像下面@briankip的答案一样,如果弹出存储时存在冲突,则pop不会删除存储(并且行为与应用完全相同)
Kashif 2014年

看来,即使您分支中未分级的更改与git stash pop的结果相同,您仍然会遇到冲突错误。
DimP '18年

79

如John Zwinck所说,有一个有用的链接指出了区别,并且有一个缺点git stash pop

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

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


6
即使在开始时似乎是这样,但当弹出失败时仍会隐藏存储的事实并不是一个缺点。
Amalgovinus

65

git stash pop应用顶部隐藏的元素并将其从堆栈中删除。git stash apply所做的相同,但将其保留在隐藏堆栈中。


42

实际观察它可能会帮助您更好地理解差异。

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

让我们修改文件并向其中添加“ 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更像是偷看


5

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


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 = top-1),但peek()只能获取top元素。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.