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

fti*_*sem 21 git git-stash

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

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

  • test1.py
  • test2.py

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

git stash
git pull
git stash pop
Run Code Online (Sandbox Code Playgroud)

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

unmerged (6b126638f7c63aa648609afa60ab972a2403502b)
fatal: git-write-tree: error building trees
Cannot save the current index state
Run Code Online (Sandbox Code Playgroud)

这让我很伤心.它只是想要一个简单的事情:更新我没有改变的所有文件.我稍后会照顾合并.

Cas*_*bel 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
Run Code Online (Sandbox Code Playgroud)

似乎应该有一种方法可以同时做到这两种方式,update-index但从快速的观察来看,这对我来说并不明显.(但话说再说一次,对于实际的合并冲突,你永远不想将冲突标记为已经解决但没有暂存内容;这只是为了存在这种情况.)

正如VonC在他的回答中所说,如果再次发生这种情况,你可以很容易地看到在应用存储时使用的东西有什么合并冲突git status.它们将以红色列出(如果您有颜色)并说出unmerged(或者可能deleted by us/them是删除/修改冲突).

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