我怎样才能看到一个Git合并冲突的“三种比较”?

假设我在Git分支master和我git merge featurebranchfoo.html存在冲突。

当我打开foo.html ,我在冲突的领域看到了什么是master ,什么是featurebranch 。 但我真的不知道masterfeaturebranch发生了什么变化 。 我只知道现在的主人

我想看看每个应用的差异

或者,要得到相同的信息,我可以看到:

  • 版本master现在已经
  • 版本featurebranch现在
  • 他们的共同祖先的版本

我怎样才能看到这个?

从git-merge(1) ,

通过将“merge.conflictstyle”configurationvariables设置为“diff3”,可以使用其他样式。

除了<<<<<<<=======>>>>>>>标记之外,它还使用另一个

| 标记后跟原始文本。 你可以说原来只是陈述了一个事实,你方只是放弃了那个陈述而放弃了,而另一方则试图有一个更积极的态度。 有时你可以通过查看原件来获得更好的分辨率。

这可以使用启用

 $ git config --global merge.conflictstyle diff3 

很多GUI差异/合并工具都有3或4路合并视图。 我强烈build议Beyond Compare解决合并冲突。 另一个(好的)工具是DiffMerge 。

你可以设置一个自定义的mergetool来和git mergetool命令一起使用。 这是我使用msysgit在我的Windows机器上的超越比较(专业版)和DiffMerge的.gitconfigconfiguration:

 [merge] tool = bc3 [diff] tool = bc3 [difftool "dm"] cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\" [difftool "bc3"] cmd = "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\"" [mergetool "bc3"] cmd = "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"" 

你可以在git config官方的Linux Kernel Git文档中阅读关于各种差异/合并工具configuration的更多信息。