21

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

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

  • 测试1.py
  • 测试2.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

这让我有点难过。它只想要一件简单的事情:更新我没有更改的所有文件。稍后我会处理合并。

4

2 回答 2

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是删除/修改冲突)。

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

于 2011-05-13T19:08:36.407 回答
2

这应该意味着您的第二个存储由于仍未解决的合并而无法工作。
请参阅此SO question,它说明了存储中的相同错误消息。

线程确认树不能包含未合并的文件。

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

解决问题,提交,继续。

于 2011-05-13T19:08:50.673 回答