git - 在存储弹出期间合并冲突后的错误

时间:2011-05-13 18:56:26

标签: git git-stash

原标题:git - 更新所有尚未更改的文件

目前我正在尝试更新git存储库中尚未更改的所有文件。让我们说例如我有:

  • test1.py
  • test2.py

test1.py已在本地修改,而两个文件都已远程修改。现在我试过了:

git stash
git pull
git stash pop

恢复了我的更改,给了我一个警告,我需要合并test1.py。到现在为止还挺好。当我尝试再次执行相同的过程时(两个文件再次远程更改后)出现问题。 Git现在说

unmerged (6b126638f7c63aa648609afa60ab972a2403502b)
fatal: git-write-tree: error building trees
Cannot save the current index state
这让我很伤心。它只是想要一个简单的事情:更新我没有改变的所有文件。我稍后会照顾合并。

2 个答案:

答案 0 :(得分:27)

您解决了文件中的冲突(可能?参见脚注),但Git不知道您是否已完成。你必须向git表明你已经完成了解决冲突的问题。 (否则,如果它让你继续前进并且你实际上没有解决它,你可以找到各种各样的方法来射击自己。)

据我所知,这样做的方法是:

git add <file>        # stage the resolved version, which marks it as resolved
git reset HEAD <file> # unstage the changes, leaving the resolution just in the work tree

似乎应该有一种方法可以同时使用update-index同时进行这两种操作,但从快速的观察来看,这对我来说并不明显。 (但话又说回来,对于实际的合并冲突,你永远不会想要将冲突标记为已解决,而不会暂停内容;这只是为了存在这种情况。)

正如VonC在他的回答中所说,如果再次发生这种情况,您可以在使用git status应用存储时轻松查看哪些内容存在合并冲突。它们将以红色列出(如果您有颜色)并说unmerged(如果是删除/修改冲突,则可能是deleted by us/them。)

脚注:回顾你的问题,我实际上无法判断你是否修复了冲突 - 你只是说“到目前为止这么好”。您看到的“警告”实际上是一种立即解决冲突的建议。当您尝试将所提取的更改与您所隐藏的更改结合起来时,就会出现冲突。您必须解决该冲突并将工作树置于一致状态,然后才能继续前进。像处理合并冲突一样处理它 - 查看文件,找到冲突标记,找出要保留的内容! (然后再回头看看如何完成。)

答案 1 :(得分:2)

这应该意味着你的第二个藏匿不起作用,因为仍然没有解决合并 请参阅此SO question,其中显示了存储中的相同错误消息。

这个thread confirms树不能包含未合并的文件。

  

你有一棵树有未合并的条目   你为什么不研究这个问题并解决它?   一个简单的“git status”应该会告诉你什么是未合并的   条目。简单地查看这些文件应该会显示冲突标记。

     

解决问题,提交,继续。