问题描述
今天,我试图合并两个分支,但发生冲突。我使用Visual Studio 2019团队资源管理器,并且像这样设置.gitconfig来启动KDiff3:
[merge]
tool = kdiff3
[mergetool "kdiff3"]
path = C:/Program Files/KDiff3/bin/kdiff3.exe
trustExitCode = false
到目前为止,它一直很好用,但是今天,该文件的基本版本中有Git的冲突标记。像这样:
Common code
<<<<<<<<< Temporary merge branch 1
One version of code
=========
Another version of code
>>>>>>>>> Temporary merge branch 2
More common code
这从未发生过。这些标记不是仅用于使用文本文件手动合并吗?关于如何解决此问题的任何想法?
编辑:
另外,直接从命令行使用git具有相同的标记,但是我不知道这些标记是否存在,因为我几乎从不使用命令行。这是我使用的命令:
git mergetool -g FileName.cs
解决方法
只要存在合并冲突,Git就会添加这些标记。 Git的一种方法是使冲突的位置易于发现(通过人工或合并工具)并显示替代版本。
合并工具可以检测这些标记,并使用户更容易比较版本并选择他们喜欢的版本。 GUI工具(例如KDiff3)通常会隐藏标记,并在不同的窗格中显示替代版本。用户解决了冲突后,合并工具将删除带有标记的行。
其他工具可以轻松地从冲突跳到冲突,以不同的颜色突出显示替代版本,并具有可轻松解决冲突的键绑定,但它们不会向用户隐藏这些Git冲突标记(例如ediff)。
无论如何,无论您是否看到它们(取决于您使用的合并工具),它们都会一直存在,直到解决冲突为止。
我不知道这次用KDiff3出了什么问题,但是手动修复很容易:
您可以使用任何文本编辑器简单地打开文件,删除行
<<<<<<<<< Temporary merge branch 1
=========
>>>>>>>>> Temporary merge branch 2
,然后选择One version of code
,Another version of code
或两者的组合(或完全其他)。
完成后,保存文件,运行:
git add <file>
(这告诉Git您已经解决了冲突),然后:
git commit
您不必输入提交消息,因为Git会自动为您提供合并提交消息(您可以接受或修改)。
等等。
,结果证明,在正常冲突中不会发生这种情况,这只是一个复杂的合并树的情况。对于与明显的单个共同祖先的正常合并冲突,git生成了三个简单文件供合并工具查看。当您有多个冲突的共同祖先时,它会在“基本”文件中保留一些标记。