我使用git stash pop已经有一段时间了。最近我发现了git stash apply命令。当我试用它的时候,它似乎和git stash pop一样工作。git stash pop和git stash apply之间的区别是什么?
git stash pop
git stash apply
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
git stash drop
git stash apply && git stash drop
r7s23pms2#
得到了这个有用的链接,说明了区别,正如约翰Zwinck所说的和git stash pop的缺点。例如,假设你的stashed更改与你第一次创建stash后所做的其他更改发生了冲突,pop和apply都会触发合并冲突解决模式,让你很好地解决这些冲突......而且两者都不会消除stash,尽管你可能也期待pop。由于很多人认为stash只是一个简单的堆栈,这经常导致他们后来意外地弹出相同的藏匿处,因为他们认为它已经不见了。链接:http://codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful/
kzmpq1sx3#
git stash pop应用顶部的stashed元素并将其从堆栈中移除。git stash apply执行相同的操作,但将其留在stash堆栈中。
yxyvkwin4#
看看它的实际操作可能会帮助你更好地理解两者的区别。假设我们正在处理master分支,并且有一个包含“Hello”字符串的文件hello.txt。让我们修改文件并添加“world”字符串,现在你想转到另一个分支来修复你刚刚发现的一个小bug,所以你需要stash你的修改:
master
hello.txt
stash
git stash
您已经移动到另一个分支,修复了bug,现在您已经准备好继续在您的master分支上工作,因此您可以pop更改:
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。
apply
iibxawm45#
假设不会抛出任何错误,并且您希望处理可用stash列表中的顶部stash项:git stash pop = git stash apply + git stash drop
yks3o0rb6#
快速解答:git stash pop-〉从隐藏列表中删除git stash apply-〉将其保存在收藏列表中
fjnneemd7#
在git中,stash是一个存储区域,可以在其中移动当前更改的文件。当您想要从git存储库中提取一些更改,并在git存储库中可用的一些共有文件中检测到一些更改时,stash区域非常有用。
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仅应用来自stash区域的更改,而git pop应用并删除来自stash区域的更改。
git apply
git pop
ykejflvf8#
Git存放Pop vs apply正在运行
Pop vs apply
如果你想把你最先隐藏的变更应用到当前的非暂存变更中,并删除那个隐藏的变更,那么你应该选择git stash pop。
# apply the top stashed changes and delete it from git stash area. git stash pop
但是如果你想把你的顶级隐藏更改应用到当前的非暂存更改而不删除它,那么你应该选择git stash apply。注意:您可以将这种情况与Stack类pop()和peek()方法联系起来,其中pop通过递减(top = top-1)更改top,但peek()只能获得top元素。
Stack
pop()
peek()
mitkmikd9#
你可以用同样的方式思考,这就是我是怎么学到的:git stash pop -> ctrl + x, ctrl + v .(剪切和粘贴)git stash apply -> ctrl + c, ctrl + v .(复制和粘贴)
git stash pop -> ctrl + x, ctrl + v
git stash apply -> ctrl + c, ctrl + v
9条答案
按热度按时间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
r7s23pms2#
得到了这个有用的链接,说明了区别,正如约翰Zwinck所说的和
git stash pop
的缺点。例如,假设你的stashed更改与你第一次创建stash后所做的其他更改发生了冲突,pop和apply都会触发合并冲突解决模式,让你很好地解决这些冲突......而且两者都不会消除stash,尽管你可能也期待pop。由于很多人认为stash只是一个简单的堆栈,这经常导致他们后来意外地弹出相同的藏匿处,因为他们认为它已经不见了。
链接:http://codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful/
kzmpq1sx3#
git stash pop
应用顶部的stashed元素并将其从堆栈中移除。git stash apply
执行相同的操作,但将其留在stash堆栈中。yxyvkwin4#
看看它的实际操作可能会帮助你更好地理解两者的区别。
假设我们正在处理
master
分支,并且有一个包含“Hello”字符串的文件hello.txt
。让我们修改文件并添加“world”字符串,现在你想转到另一个分支来修复你刚刚发现的一个小bug,所以你需要
stash
你的修改:您已经移动到另一个分支,修复了bug,现在您已经准备好继续在您的
master
分支上工作,因此您可以pop
更改:现在,如果您尝试查看隐藏内容,您将获得:
但是,如果您使用
git stash apply
,您将获得隐藏的内容,但也会保留它:因此
pop
就像stack的pop --一旦元素弹出,它实际上就会删除元素,而apply
更像是 peek。iibxawm45#
假设不会抛出任何错误,并且您希望处理可用stash列表中的顶部stash项:
git stash pop
=git stash apply
+git stash drop
yks3o0rb6#
快速解答:
git stash pop
-〉从隐藏列表中删除git stash apply
-〉将其保存在收藏列表中fjnneemd7#
在
git
中,stash是一个存储区域,可以在其中移动当前更改的文件。当您想要从
git
存储库中提取一些更改,并在git
存储库中可用的一些共有文件中检测到一些更改时,stash
区域非常有用。注:-
git apply
仅应用来自stash区域的更改,而git pop
应用并删除来自stash
区域的更改。ykejflvf8#
Git存放
Pop vs apply
正在运行如果你想把你最先隐藏的变更应用到当前的非暂存变更中,并删除那个隐藏的变更,那么你应该选择
git stash pop
。但是如果你想把你的顶级隐藏更改应用到当前的非暂存更改而不删除它,那么你应该选择
git stash apply
。注意:您可以将这种情况与
Stack
类pop()
和peek()
方法联系起来,其中pop通过递减(top = top-1)更改top,但peek()
只能获得top元素。mitkmikd9#
你可以用同样的方式思考,这就是我是怎么学到的:
git stash pop -> ctrl + x, ctrl + v
.(剪切和粘贴)git stash apply -> ctrl + c, ctrl + v
.(复制和粘贴)