即使我可以使用未提交的更改手动备份项目文件夹,git stash也会失败,然后调用“撤消未提交的更改”。
例如,如果我向项目添加新文件foo.cpp
,就会发生这种情况。当我想稍后隐藏更改时,我收到错误。这来自Qt Creator中的版本控制输出窗格:
14:07 Executing in C:\MyProject: git.exe add --intent-to-add foo.cpp
14:07 Executing in C:\MyProject: git.exe stash save QtCreator 2013-02-05T14:07:18
Cannot stash in "C:\MyProject": error: Entry 'foo.cpp' not uptodate. Cannot merge.
Cannot save the current worktree state
git stash的重点不在于自动执行此过程,为什么在简单地撤消更改成功后会失败?
答案 0 :(得分:2)
--intent-to-add
已将foo.cpp
置于未添加但仍处于跟踪状态。 (git cat-file -p $(git write-tree)
:foo.cpp是正确的,不存在。git status
:它被跟踪了。但是我相信没有人教过git stash
来记住这一点,并因此合并了状态保存将导致foo.cpp
未被跟踪。由于git stash pop
实际上已合并到索引和工作树中 - 您可以存储您的更改,使当前HEAD成为父级,完全检查其他内容,然后执行{ {1}}将隐藏内容中的更改应用于新的工作树 - 您看到的消息来自于试飞合并git stash pop
,以验证即时stash
会离开您的worktree和index就像它们一样。但在这种情况下,它不会。git stash pop
在你的索引中被跟踪,而在stashed树中缺席。当在那棵树中合并时(在没有意图的情况下)添加数据),唯一明智的做法是将其解释为删除。但是你已经对要求跟踪的文件进行了更改:合并可以看到你丢失了你告诉git你关心的内容。所以合并拒绝运行,直到你要么delet你自己的文件或提交到存储库,存储是拒绝创建一个你不能安全弹出的存储。
答案 1 :(得分:0)
尝试运行git stash save -u
而不是git stash
。