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

gitstashpop和gitstashapply之间有什么区别?


当前回答

将其付诸实践可能会帮助您更好地理解差异。

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

让我们修改文件并将“world”字符串添加到其中。现在,您需要移动到其他分支以修复刚刚发现的小错误,因此需要隐藏更改:

git stash

您移动到另一个分支,修复了错误,现在您可以继续在主分支上工作,因此您可以弹出更改:

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就像堆栈的pop一样——它实际上在元素被弹出后就移除了,而apply更像是peek。

其他回答

将其付诸实践可能会帮助您更好地理解差异。

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

让我们修改文件并将“world”字符串添加到其中。现在,您需要移动到其他分支以修复刚刚发现的小错误,因此需要隐藏更改:

git stash

您移动到另一个分支,修复了错误,现在您可以继续在主分支上工作,因此您可以弹出更改:

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就像堆栈的pop一样——它实际上在元素被弹出后就移除了,而apply更像是peek。

快速回答:

git stash pop->从隐藏列表中删除

git存储应用->将其保存在存储列表中

得到了这个有用的链接,说明了区别,正如约翰·兹温克(John Zwinck)所说,以及git stash pop的缺点。

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

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

你可以用同样的方式思考,这就是我学习的方式:

gitstashpop->ctrl+x,ctrl+v(剪切粘贴)

git stash apply->ctrl+c,ctrl+v(复制并粘贴)

Git Stash Pop与应用工作

如果你想将你的顶级隐藏更改应用于当前的非暂存更改并删除该隐藏,那么你应该使用git隐藏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=top 1),但peech()只能获得top元素。