git stash pop和git stash apply的区别

yh2wf1be  于 2022-12-17  发布在  Git
关注(0)|答案(9)|浏览(257)

我使用git stash pop已经有一段时间了。最近我发现了git stash apply命令。当我试用它的时候,它似乎和git stash pop一样工作。
git stash popgit stash apply之间的区别是什么?

sr4lhrrt

sr4lhrrt1#

git stash pop在应用后丢弃(默认情况下是最上面的)stash,而git stash apply将其留在stash列表中,以备以后重用(或者您可以git stash drop它)。
除非在git stash pop之后有冲突,否则会发生这种情况,在这种情况下,它不会删除隐藏的内容,使其行为与git stash apply完全相同。
换个Angular 来看:就是git stash apply && git stash drop

r7s23pms

r7s23pms2#

得到了这个有用的链接,说明了区别,正如约翰Zwinck所说的和git stash pop的缺点。
例如,假设你的stashed更改与你第一次创建stash后所做的其他更改发生了冲突,pop和apply都会触发合并冲突解决模式,让你很好地解决这些冲突......而且两者都不会消除stash,尽管你可能也期待pop。由于很多人认为stash只是一个简单的堆栈,这经常导致他们后来意外地弹出相同的藏匿处,因为他们认为它已经不见了。
链接:http://codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful/

kzmpq1sx

kzmpq1sx3#

git stash pop应用顶部的stashed元素并将其从堆栈中移除。git stash apply执行相同的操作,但将其留在stash堆栈中。

yxyvkwin

yxyvkwin4#

看看它的实际操作可能会帮助你更好地理解两者的区别。
假设我们正在处理master分支,并且有一个包含“Hello”字符串的文件hello.txt
让我们修改文件并添加“world”字符串,现在你想转到另一个分支来修复你刚刚发现的一个小bug,所以你需要stash你的修改:

git stash

您已经移动到另一个分支,修复了bug,现在您已经准备好继续在您的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就像stack的pop --一旦元素弹出,它实际上就会删除元素,而apply更像是 peek

iibxawm4

iibxawm45#

假设不会抛出任何错误,并且您希望处理可用stash列表中的顶部stash项:
git stash pop = git stash apply + git stash drop

yks3o0rb

yks3o0rb6#

快速解答:
git stash pop-〉从隐藏列表中删除
git stash apply-〉将其保存在收藏列表中

fjnneemd

fjnneemd7#

git中,stash是一个存储区域,可以在其中移动当前更改的文件。
当您想要从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仅应用来自stash区域的更改,而git pop应用并删除来自stash区域的更改。

ykejflvf

ykejflvf8#

Git存放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)更改top,但peek()只能获得top元素。

mitkmikd

mitkmikd9#

你可以用同样的方式思考,这就是我是怎么学到的:
git stash pop -> ctrl + x, ctrl + v .(剪切和粘贴)
git stash apply -> ctrl + c, ctrl + v .(复制和粘贴)

相关问题