Git stash pop想要合并

时间:2015-07-14 07:46:13

标签: git

我真的不明白git stash。根据{{​​3}},我可以使用stash来保存我当前的存储库状态,就像我在某处备份/恢复我的存储库一样。

显然我所做的是别的......

我首先想完全保存我的工作,即使是未跟踪的文件。所以我做了:

git stash -u

然后我做了一些不太重要的工作。最后我想回到原来的工作,所以我使用了这个命令:

git stash pop

奇怪的是我收到了这条消息:

Auto-merging foo.c
CONFLICT (content): Merge conflict in foo.c

在我的文件中我得到了这个

++<<<<<<< Updated upstream
++=======
+     // something
+
++>>>>>>> Stashed changes

实际上,我没有使用过stash,而是使用了:

cp -R myproject myproject_backup

后来恢复我的工作:

rm myproject && mv myproject_backup myproject

我误解了什么?

2 个答案:

答案 0 :(得分:1)

Stash的工作原理是将签出的修订版本与当前工作目录之间的差异,并将此差异存储为临时提交在一个单独的位置。

这可以让你隐藏你的工作,切换到另一个分支,做一些事情,切换回来,然后弹出你的藏匿处。

但是,如果您尝试将您的存储弹出到与您推送的存储库不同的版本上,例如因为您在其间拉动了原点,则很可能会发生临时提交中的某些更改与添加的其他提交。在这种情况下,你必须合并。

答案 1 :(得分:1)

看起来你在推送藏匿之后所做的工作会影响你藏匿的文件(只有你知道发生了什么,但我怀疑与远程仓库有一些交互),所以它无法重新应用更改时你把它从藏匿处弹出来。

在你链接的同一页面上也说:

  

工作目录必须与索引匹配。应用状态可以   失败与冲突;在这种情况下,它不会从藏匿处移除   名单。您需要手动解决冲突并调用git stash   之后手动删除。

有关其他一些SO问题的更多信息,例如: this one,关于在已删除存储的情况下恢复到干净状态,并且只是在工作树中进行更改。

是的,你可以复制目录并将其恢复,但你已经失去了你之间的“工作”。