合并冲突解决方案

时间:2012-02-09 08:02:56

标签: git user-interface merge-conflict-resolution

当Git中出现合并冲突时,会将以下垃圾插入冲突的文件中。三个问题:

  1. 您如何阅读这些注释?
  2. 修复这些合并冲突时要使用哪些策略?
  3. 是否有适用于Mac的GUI工具,它知道如何阅读这些文件并并排展示这两个版本,以便更轻松地解决问题?
  4. enter image description here

    注意:如果相关,我使用的是GitHub的Mac GUI客户端。

5 个答案:

答案 0 :(得分:35)

<<<<<<======之间的所有内容都来自HEAD修订版,这是在开始合并操作之前的已提交状态(git merge会在树变脏时抱怨,所以它应该等同于你的工作目录。)

======>>>>>>之间的部分来自要合并的版本。 >>>>>>之后的文本是引入冲突更改的提交的注释。

存在冲突标记意味着该部分文件的基本版本与“新”版本不同。基本版本(最后一个共同祖先)未显示。

如果你想要一个更舒适的合并并有一个GUI可用,我建议你看看kdiff3。

答案 1 :(得分:21)

现在有一种比尝试读取Git插入文件的乱码标记更好的解决方案。 Black Pixel的diff工具的第二个版本Kaleidoscope 2现在也是一个合并工具。它不是免费的,但它的工作效果非常好。

安装Kaleidoscope 2后,与Git集成非常简单。打开Kaleidoscope,然后从菜单栏中选择 Kaleidoscope &gt;的集成...

Kaleidoscope's Integration menu option.

然后你会看到这个窗口。只需从左侧导航栏中选择 Git ,然后安装ksdiff命令行工具,然后制作Kaleidoscope Git的默认差异和合并工具。

Kaleidoscope's Git Integration dialog.

最后,一旦你在Git中发生合并冲突,只需转到命令行并执行git mergetool。现在冲突很容易理解。享受。

Kaleidoscope sane view for merge conflicts.

答案 2 :(得分:16)

<<<< HEAD #Where the conflict starts

#Previous Revision

========== # The point where things look iffy

#Things that changed

>>>>> New Commit # Point where the conflict ends

Mac的Xcode附带FileMerge,可以使用opendiff在命令行上访问。

git mergetool -t opendiff

答案 3 :(得分:4)

您可以配置(图形)合并工具并使用该工具进行冲突解决。

另请查看git mergetool命令 - 如果您安装了某个预定义工具或已配置其他工具,则会打开解决方案http://schacon.github.com/git/git-mergetool.html的工具

如果您对GUI工具感兴趣,则无需担心符号的真正含义,因为GUI工具可帮助您轻松制作分辨率。只需了解标有=====>>>>>的部分就是冲突部分。

答案 4 :(得分:0)

当您有两个分支对同一文件进行更改并尝试合并它们时,将发生合并冲突。要查看冲突文件列表,请在终端上运行git status

文件的冲突行将标有可视指示符: <<<<< - 冲突在此行之后开始。 ===== - 从HEAD和merging_branch改变Devides。 >>>>> - 冲突线的结束。

<<<<<<< HEAD
conflicted text from HEAD
=======
conflicted text from merging_branch
>>>>>>> merging_branch

当您修复冲突的文件并准备合并时,您所要做的就是运行git addgit commit来生成合并提交。提交后,git push对分支进行更改。

参考文章:Git merge