我如何使用vimdiff解决冲突?
我刚刚在git中合并了一个分支到我的主分支,并且我得到了Automatic merge failed; fix conflicts and then commit the result.
Automatic merge failed; fix conflicts and then commit the result.
现在我运行了git mergetool
,vimdiff打开了下面的图片。 我不知道如何使用vimdiff。 这里的每个小组意味着什么?我应该如何着手解决合并冲突?
所有四个缓冲区都提供了同一个文件的不同视图。 左上角的缓冲区(LOCAL)是文件在目标分支中的显示方式(您正在合并的内容)。 右上角的缓冲区(REMOTE)是文件在源分支中的显示方式(您正在合并的位置)。 中间缓冲区(BASE)是两者的共同祖先(因此您可以比较左右版本之间的差异)。
我可能会误以下几点。 我认为合并冲突的根源在于,自BASE以来,这两个文件都改变了文件的相同部分; LOCAL将引号从双改为单引号,REMOTE进行了相同的更改,但也将背景值从一个颜色更改为一个URL。 (我认为合并不够聪明以至于所有对LOCAL的改变都存在于REMOTE中;它只知道LOCAL自BASE以来已经在与REMOTE相同的地方进行了更改)。
在任何情况下,底部缓冲区都包含您可以实际编辑的文件 - 位于工作目录中的文件。 你可以做任何你喜欢的改变; vim
向您展示了它与每个顶视图的不同之处,它们是自动合并无法处理的区域。 如果您不想要REMOTE更改,请从LOCAL提取更改。 如果您希望更改LOCAL更改,请从REMOTE中进行更改。 如果您认为REMOTE和LOCAL都是错误的,请从BASE中拔出。 如果你有更好的主意,做一些完全不同的事情! 最后,您在这里所做的更改将会实际承诺。
@ chepner的答案很好,我想补充一些关于“我应该如何着手解决合并冲突”部分的问题。 如果你看看如何在这种情况下真正使用vimdiff,它会在下面。
首先,解决“中止一切”选项 - 如果您不想使用“vimdiff”并想中止合并:按Esc,然后键入:qa!
并按Enter键。 (另请参阅如何退出Vim编辑器?)。 然后Git会问你是否合并完成,用n
回复。
如果你想使用vimdiff,这里有一些有用的快捷方式。 这假设你知道Vim的基本知识(导航和插入/普通模式):
:diffget LO
:diffget RE
:diffget BA
:wqa
您可以在Internet上搜索其他vimdiff快捷方式。 我发现这个例子很有用:https://gist.github.com/hyamamoto/7783966
链接地址: http://www.djcxy.com/p/22589.html