我真的不明白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
我误解了什么?
答案 0 :(得分:1)
Stash的工作原理是将签出的修订版本与当前工作目录之间的差异,并将此差异存储为临时提交在一个单独的位置。
这可以让你隐藏你的工作,切换到另一个分支,做一些事情,切换回来,然后弹出你的藏匿处。
但是,如果您尝试将您的存储弹出到与您推送的存储库不同的版本上,例如因为您在其间拉动了原点,则很可能会发生临时提交中的某些更改与添加的其他提交。在这种情况下,你必须合并。
答案 1 :(得分:1)
看起来你在推送藏匿之后所做的工作会影响你藏匿的文件(只有你知道发生了什么,但我怀疑与远程仓库有一些交互),所以它无法重新应用更改时你把它从藏匿处弹出来。
在你链接的同一页面上也说:
工作目录必须与索引匹配。应用状态可以 失败与冲突;在这种情况下,它不会从藏匿处移除 名单。您需要手动解决冲突并调用git stash 之后手动删除。
有关其他一些SO问题的更多信息,例如: this one,关于在已删除存储的情况下恢复到干净状态,并且只是在工作树中进行更改。
是的,你可以复制目录并将其恢复,但你已经失去了你之间的“工作”。