如何看到 Git 合并冲突的“三方差异”?

假设我在 Git 分支 mastergit merge featurebranch上,在 foo.html中有一个冲突。

当我打开 foo.html,我看到,在冲突区域中,什么是 master,什么是 featurebranch。但是我真的不能说 什么变化是在 master上制作的,与 featurebranch有冲突; 我只知道主人有 现在

我想看看每一个应用的 差异

或者,为了得到同样的信息,我可以看到:

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

我怎么能看到这个?

31889 次浏览

来自 Git-merge (1),

另一种风格可以通过将“ merge.contactstyle”配置变量设置为“ def3”来使用。

除了 <<<<<<<=======>>>>>>>标记之外,它还使用另一个 |||||||标记,后跟原始文本。有时候你可以通过观看原作来得到一个更好的分辨率。

可以使用

git config --global merge.conflictstyle diff3

或在 ~/.gitconfig文件中正确

[merge]
conflictstyle = diff3

很多 GUI diff/merge 工具都有一个3或4路合并视图。我强烈推荐 无与伦比用于解决合并冲突。另一个(好的)工具是 区分合并

您可以设置一个自定义 mergetool 来与 git mergetool命令一起使用。这是我在 Windows 机器上使用 msysgit 进行 Beyond Compare (专业版)和 DiffMerge 的 .gitconfig配置:

[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 内核 Git 文档中阅读有关各种 diff/merge 工具配置的更多信息。