为什么Tools-> Git-> Stash在Qt Creator中失败,其中Tools-> Git->撤消未提交的更改不?

时间:2013-02-05 10:13:16

标签: git qt-creator git-stash

即使我可以使用未提交的更改手动备份项目文件夹,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的重点不在于自动执行此过程,为什么在简单地撤消更改成功后会失败?

2 个答案:

答案 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