git分支之间的视觉差异


196

这个答案非常适合查看被检入git的两个文件之间的视觉差异: 如何使用视觉差异程序查看“ git diff”输出?

但是,我希望看到两个分支之间的视觉差异。到目前为止,我最好的选择似乎是:

git diff --name-status master dev

这不是很有用,也不是很直观。

还有什么更好的了吗?


我在下面添加了一个答案,其中包括一个以前在这里未解决的视觉效果:如何查看分支包含哪些提交(无论是公用的还是唯一的)。核心git功能可以做很多事情。最好指定要包含在视觉差异中的内容。大多数答案都集中在提交的逐行差异上,您的示例集中在给定提交中受影响的文件名。
凯V

Answers:


227

使用git diff范围

git diff branch1..branch2

这将比较每个分支的技巧。

如果您确实想要一些GUI软件,则可以尝试像SourceTree这样的东西,它支持Mac OS X和Windows。


27
这不是视觉上的母鹿。;)
海军陆战队

35
在Linux系统中我建议安装Meld,然后将其设置为默认difftoolgit config --global diff.tool meld最后启动它,而不是简单的diffgit difftool branch1..branch2。结果看起来更漂亮。
加百利

8
使用不带git config的Meld visual difftool:git difftool -t meld branch1..branch2
2013年

2
对于读者:在我的文章中,这里的每个答案都提供了一种方式来执行此人要求的内容(GUI中的差异),除了该答案。
G Huxley

3
@GHuxley OP在哪里要求GUI解决方案?
Alex

97

为了看到两个分支之间所有差异的视觉差异,我喜欢合并两个分支-无需提交合并-然后使用git gui或git Extensions来获得差异的概述。

无需提交即可合并的Git命令行:

git checkout分支
git merge --no-commit --no-ff branchB

然后,完成后,您可以撤消合并

git merge --abort

(在@jcugat的评论中)


10
如果您喜欢使用IDE(或其他并非总是易于与Git GUI difftool集成)的工具,请不要低估这种方法的实用性!这个选项对我来说真是太棒了,因为我使用Intellij,并且非常喜欢能够在IDE中快速浏览经过修改的文件,其语法高亮,错误高亮,死代码高亮,可编辑就地荣耀。我在所有代码审查中都使用了这种方法,并且在GitHub中留下了糟糕的请求比较工具。我什至可以进行编辑,完成后,我将创建一个新分支,并附加“ -code-review”并提交!
kghastie 2014年

2
只要没有合并冲突,它就会起作用;如果有任何合并冲突,它就会失败。
娜迦·基兰

1
我非常喜欢这种方法!另外,至少对我而言,git gui冲突显示为未上演的阶段,非冲突显示为上演的阶段,因此您甚至可以很好地区分。对我的帮助远胜于最高答案:D
DJGummikuh '16


49

您也可以使用gitk轻松做到这一点。

> gitk branch1 branch2

首先单击branch1的尖端。现在,右键单击branch2的尖端,然后选择“比较此->已选择”。


7
gitk branch1..branch2仅使用显示两个修订之间的提交。
T3rm1 2014年

如果要查看分支中所做的所有更改,请使用gitk(不使用branch1 branch2)。
mikewasmike

31

对于使用TortoiseGit的Windows用户,您可以通过此相当模糊的功能获得视觉上的比较:

  1. 导航到要比较的文件夹
  2. 按住shift并右键单击它
  3. 转到TortoiseGit->浏览参考
  4. 使用ctrl选择两个分支比较
  5. 右键单击您的选择,然后单击“比较选定的参考”

资料来源:http : //wikgren.fi/compare-diff-branches-in-tortoise-git-or-how-to-preview-changes-before-doing-a-merge/


你为什么要压低档?
Zero3 '16

1
如果您已将TortoiseGit配置为不显示某些项目,则在单击鼠标右键的同时按住shift会始终显示完整的TortoiseGit菜单。
搜寻过

这太棒了。希望它是一个更加突出的功能。
德鲁

22

如果您使用的是OSX或Windows 7+,则Atlassian SourceTree可以很好地实现此目的。这是免费的。

您可以在并行差异设置中看到分阶段的更改,并且可以轻松地将本地与远程分支以及任何其他两个分支进行比较。选择多个文件时,差异显示如下:

在此处输入图片说明

假设您已经签出了一个功能分支,并且想要查看与“ master”的差异,请右键单击“ master”分支,然后选择“与当前差异”

不幸的是,它似乎不会很快在* nix发行版中提供。


3
它可能是“免费的”,但肯定需要一些时间来阅读其注册使用条款:atlassian.com/legal/customer-agreement 我到目前为止一直喜欢该工具,但这可能使我失望。
akauppi 2014年

@akauppi哪些部分让您失望?我认为所有这些协议几乎都相同
Alex

那是一年多以前了。是的,协议可能相似,但这是SourceTree推动我完成的过程。真奇怪 不过,过去。我不会为您提供详细信息。抱歉
akauppi '16

16

尝试“ difftool”(假设您已经安装了diff工具)-请参阅https://www.kernel.org/pub/software/scm/git/docs/git-difftool.html

我发现名称状态适合摘要,但是difftool会迭代更改(该-d选项为您提供目录视图),例如

$ git difftool their-branch my-branch

Viewing: 'file1.txt'
Launch 'bc3' [Y/n]:
...

或正如@ rsilva4所提到的-d,默认情况下是您当前的分支,例如-与master进行比较:

$  git difftool -d master..

...是的-有很多变化-https: //www.kernel.org/pub/software/scm/git/docs/git-reset.html


3
谢谢,这很有用。添加-d选项将使情况变得更好:git difftool -d their-abc my-abc
rsilva4 2014年

由于explainshell.com 目前似乎无法解析-d选项,因此联机帮助页上的内容如下:-d --dir-diff: Copy the modified files to a temporary location and perform a directory diff on them. This mode never prompts before launching the diff tool.
waldyrious

8

如果您使用的是github,则可以使用该网站:

github.com/url/to/your/repo/compare/SHA_of_tip_of_one_branch...SHA_of_tip_of_another_branch

这将为您显示两者的比较。


这行得通(我一直都这样做),但是它要求您将代码推送到github存储库。不过,在我看来,这并不是一个可以接受的警告。
adamwong246

2
或者只是github.com/url/to/your/repo/compare/,然后您可以选择分支机构
caramba

我如何获得SHA?我的意思是,分支尖端的SHA是什么意思?
Optimus Prime

8

GitExtensions中,您可以按一下在修订网格中选择两个分支Ctrl。然后,您会看到这些分支之间存在差异的文件。当您选择一个文件时,将看到它的差异。

这里取


我的修订网格中选择了2个分支,但是在顶部的菜单中或单击鼠标右键时没有看到任何比较命令。
埃里克

1
我在底部窗格的标题中找到了它。有提交,文件树和差异。
埃里克

7

更新

Mac:我现在使用SourceTree。彻底推荐。我特别喜欢上演/不上演帅哥的方式。

Linux:我在以下方面取得了成功:

  • smartgit
  • 吉特·克拉肯
  • meld

例如smartgit在Ubuntu 上安装:


这可以做到:

git-diffall使用类似于meld的GUI diff工具。请参阅此处的第5点:

http://rubyglazed.com/post/15772234418/git-ify-your-command-line

这里有一个关于git和meld的不错的帖子:http : //nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy



4

您也可以使用Perforce提供的免费P4Merge来做到这一点:

http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools

在此处输入图片说明

可以在此处此处找到有关将其与Git集成的详细信息

但以上链接的简要总结为:

  • 将下面的位在〜/的.gitconfig,然后你可以做$ git mergetool,并$ git difftool在使用p4merge
  • 注意,$ git diff仍将使用默认的内联差异查看器:)(已在git版本1.8.2中进行了测试)

.gitconfig的更改

[merge]
  keepBackup = false
    tool = p4merge
[mergetool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$PWD/$BASE\"" "\"$PWD/$REMOTE\"" "\"$PWD/$LOCAL\"" "\"$PWD/$MERGED\""
    keepTemporaries = false
    trustExitCode = false
    keepBackup = false
[diff]
    tool = p4merge
[difftool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$REMOTE\"" "\"$LOCAL\""

2

如果使用出色的WebStorm编辑器,则可以与您想要的任何分支进行比较: Webstorm git比较


实际上,我刚刚注意到IntelliJ IDEA(大概也是WebStorm)具有“突出显示未选中的提交”的功能,这可以很清楚地知道分支中存在哪些提交,而另一个没有。
arthurakay

是的,我只是使用intellij通过“保存时自动格式化”有选择地减少了整个仓库中所做的更改。真的很容易。。。但是必须找到“与本地比较”选项
Tom H

1

看一下 git show-branch

核心git功能可以做很多事情。最好指定要包含在视觉差异中的内容。大多数答案都集中在提交的逐行差异上,您的示例集中在给定提交中受影响的文件名。

似乎无法解决的一个视觉问题是如何查看分支包含的提交(无论是公共的还是唯一的)。

对于这种视觉效果,我非常喜欢git show-branch;它将每个分支的组织良好的提交表分解回共同的祖先。-要在具有多个分支且有分歧的仓库上尝试,只需键入git show-branch并检查输出-有关示例的撰写,请参阅比较Git分支之间的提交


0

这是在Visual Studio(在VS 2017中测试)中如何查看整个提交与单个文件相对的视觉差异。不幸的是,它仅适用于一个分支内的提交:在“ Team Explorer”中,选择“ Branches”视图,右键单击存储库,然后选择“ View history”,如下图所示。

在此处输入图片说明

然后,当前分支的历史记录将显示在主区域中。(在当前分支上结束于较早提交的分支的分支由标签标记。)现在,使用Ctrl-Left选择几个提交,然后右键单击并从弹出菜单中选择“比较提交...”。

有关在Microsoft世界中比较分支的更多信息,请参见以下stackoverflow问题:使用Visual Studio的git分支之间的差异


1
仅显示单个分支的历史记录,因此无法在分支之间进行比较。
米哈拉·菲塔(MichałFita)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.