如何才能看到Git合并冲突的"三方差异"?

Nat*_*ong 60 git

假设我在Git分支master和我git merge featurebranch.发生了冲突foo.html.

当我打开时foo.html,我看到,在冲突地区,有什么master和有什么featurebranch.但我无法确切地说,master这种冲突方面做出了哪些改变featurebranch ; 我只知道主人现在有什么.

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

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

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

我怎么能看到这个?

Raz*_*erM 90

git-merge(1),

通过将"merge.conflictstyle"配置变量设置为"diff3",可以使用替代样式.

除了<<<<<<<,=======>>>>>>>标志,它使用另一个|||||||后跟原文标记.你可以说原来只是陈述了一个事实,而你的一方只是屈服于那个陈述并放弃了,而另一方则试图采取更积极的态度.您有时可以通过查看原始分辨率来获得更好的分辨率.

这可以使用

$ git config --global merge.conflictstyle diff3
Run Code Online (Sandbox Code Playgroud)

  • 这真是太好了!谢谢!与此同时,我发现了`git mergetool`,(对我来说)打开`vimdiff`,其中几个窗口显示类似信息,但我更喜欢你的方法. (6认同)
  • @NathanLong:顺便说一句,`mergetool`在使用`kdiff3`时真的很棒。 (2认同)

小智 11

许多GUI diff/merge工具都有3或4路合并视图.我强烈推荐Beyond Compare来解决合并冲突.另一个(好的)工具是DiffMerge.

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

[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\""
Run Code Online (Sandbox Code Playgroud)

您可以在官方Linux Kernel Git文档中git config阅读有关各种差异/合并工具配置的更多信息.

  • 我非常感谢对这个答案的任何贬低的解释.考虑到我为Windows上的msysgit安装提供了一些[流行的外部差异和合并工具](http://www.codinghorror.com/blog/2005/11/in-praise-of-beyond-compare.html)的工作配置,我认为我的答案提供了很大的价值. (3认同)
  • 对于其他的,并且一直在想为什么上面的配置不能用于3路合并,请检查您是否有Beyond Compare的Pro版本而不是标准许可证(不支持3路合并) (3认同)
  • 我觉得这个答案只是对Beyond Compare的促进,顺便说一句,效果不是很好 (2认同)