1344

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

git stash pop和 和有什么不一样git stash apply

4

8 回答 8

2143

git stash pop 应用后丢弃(默认情况下最顶层)存储,而git stash apply 将其保留在存储列表中以供以后可能重用(或者您可以使用git stash drop它)。

除非 之后发生冲突,否则会发生这种情况git stash pop,在这种情况下,它不会删除存储,使其行为与git stash apply.

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

于 2013-03-08T03:15:45.923 回答
90

正如 John Zwinck 所说,得到了这个有用的链接来说明差异,以及git stash pop.

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

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

于 2013-09-23T20:42:29.523 回答
84

git stash pop应用顶部隐藏的元素并将其从堆栈中删除。git stash apply做同样的事情,但将其留在存储堆栈中。

于 2013-03-08T03:16:25.250 回答
53

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

假设我们正在处理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更像peek

于 2016-11-30T12:27:06.877 回答
21

假设不会抛出任何错误,并且您想要处理可用存储列表中的顶部存储项:

git stash pop= git stash apply+git stash drop

于 2020-09-23T20:10:59.183 回答
15

快速回答:

git stash pop-> 从存储列表中删除

git stash apply-> 将其保存在存储列表中

于 2021-01-23T09:59:19.093 回答
13

In git stash是一个存储区域,可以移动当前更改的文件。

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

于 2019-05-16T13:12:46.280 回答
4

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) 更改顶部,但peek()只能获取顶部元素。

于 2019-02-27T09:03:46.653 回答