分支之间的Git可视化差异比较

216

这个答案非常适合查看通过git检入的两个文件的视觉差异: 如何使用可视化差异程序查看'git diff'输出?

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

git diff --name-status master dev

目前的描述不够详细,也不够具有可视化效果。

有没有更好的替代方案?


我在下面添加了一个答案,包括此前未解决的可视化问题:如何查看分支包含哪些提交(无论是共同的还是独特的)。 核心git功能可以做很多事情。最好指定您想在可视化差异中包含什么。大多数答案都侧重于逐行比较提交的差异,而您的示例侧重于给定提交中受影响文件的名称。 - Kay V
16个回答

233

使用git diff范围一起使用。

git diff branch1..branch2

这将比较每个分支的顶端。

如果您确实需要一些图形用户界面软件,则可以尝试类似于SourceTree的东西,它支持Mac OS X和Windows。


32
不是视觉上的鹿。 ;) - marines
40
在Linux系统中,我建议安装"Meld",然后使用"git config --global diff.tool meld"将其设置为默认的"difftool",最后使用"git difftool branch1..branch2"来启动它,而不是使用普通的"diff"。这样可以得到更美观的结果。请注意,这里的翻译保持了原文的意思和语气,同时尽可能使语言更加通俗易懂。 - Gabriel
17
使用Meld可视化差异工具进行Git比较,无需进行Git配置:git difftool -t meld branch1..branch2 - teichert
4
对于读者:截至我发帖时,除了这个回答,其他每个回答都提供了在GUI中执行差异的方法。 - G Huxley
3
楼主在哪里要求 GUI 解决方案? - alex
显示剩余6条评论

112
为了查看两个分支之间所有差异的可视化差异,我喜欢合并这两个分支 - 但不提交合并 - 然后使用 git gui 或 git Extensions 来概览差异。
Git命令行合并但不提交:
git checkout branchA
git merge --no-commit --no-ff branchB
完成后,您可以使用以下命令撤消合并:
git merge --abort
(感谢@jcugat的评论)

12
如果你喜欢使用IDE(或其他不易于与Git GUI difftool集成的工具),不要低估这种方法的相关性!对我来说,这个选项非常棒,因为我使用Intellij,并且极其喜欢在IDE中浏览修改过的文件,享受语法高亮、错误高亮、死代码高亮和即时编辑的全部荣耀。我将这种方法用于所有我的代码审查,并已经远离了在GitHub中笨拙的拉取请求比较工具。我甚至可以边检查边进行修改,完成后只需创建一个附加了“-code-review”的新分支并提交! - kghastie
2
只要没有合并冲突,它就能正常工作;一旦出现任何合并冲突,它就会失败。 - Naga Kiran
1
我非常喜欢这种方法!而且,至少对于我来说,在 git gui 中,它将冲突显示为未暂存的,非冲突则显示为已暂存的,因此你可以得到很好的区分。对我来说比排名第一的答案更有帮助 :D - DJGummikuh

64

如果您正在使用Intellij Idea IDE,您可以在分支中使用比较选项。

输入图片描述


有没有任何配置/选项/设置可以修改这个比较?(例如 Git diff 的 --ignore-space-at-eol) - Superole

61

你也可以使用gitk很容易地完成这个操作。

> gitk branch1 branch2

首先点击 branch1 的顶端。现在右键点击 branch2 的顶端,选择 Diff this->selected。


8
使用gitk branch1..branch2命令只会显示两个版本之间的提交记录。 - T3rm1
如果你想查看在你的分支中所做的所有更改,可以使用gitk(不包括branch1和branch2)。 - mikewasmike

35

为什么你需要按住Shift键? - Zero3
1
按住Shift键右击总是会弹出完整的TortoiseGit菜单,以防您已配置TortoiseGit不显示某些项目。 - Oversearch
这太棒了。但希望它能成为更突出的特性。 - Drew

25
如果您使用的是OSX或Windows 7+,Atlassian SourceTree对此非常适用。它是免费的。
您可以在并排差异设置中看到暂存更改,并轻松比较本地与远程以及任何其他两个分支。当选择多个文件时,差异显示如下: enter image description here 假设您已经检出了一个功能分支,并且想要查看与“master”的差异,请右键单击“master”分支,然后选择“与当前版本进行差异比较”。
不幸的是,似乎它在*nix发行版上不会很快可用

3
这个工具可能是“免费”的,但阅读他们的注册使用条款肯定需要一些时间:https://www.atlassian.com/legal/customer-agreement。到目前为止我很喜欢这个工具,但这可能会让我离开。 - akauppi
@akauppi,是哪些部分让您感到不适?我认为所有这些协议基本上都是相同的。 - alex
那是一年多以前的事了。是的,协议可能相似,但是SourceTree推动我通过的过程很奇怪。不过,这已经过去了。我无法为你提供详细信息,抱歉。 - akauppi
这是一个关于SourceTree差异的问题:https://dev59.com/Bl0a5IYBdhLWcg3wkpes - Ryan

18

如果您已经设置了diff工具,请尝试使用" difftool" - 请参见https://www.kernel.org/pub/software/scm/git/docs/git-difftool.html

我发现name status对于摘要很好,但是difftool将迭代更改(并且-d选项会为您提供目录视图),例如:

$ git difftool their-branch my-branch

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

或者,正如@rsilva4提到的那样,使用-d并默认使用当前分支,例如与主分支进行比较:

$  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
由于explainshell.com目前似乎无法解析-d选项(https://github.com/idank/explainshell/issues/179),因此这里是manpage的内容:-d --dir-diff:将修改后的文件复制到临时位置并对它们执行目录差异。在启动diff工具之前,此模式永远不会提示。 - waldyrious

11
GitExtensions 中,您可以按住 Ctrl 键选择修订表中的两个分支。然后,您可以查看这些分支之间不同的文件。当您选择一个文件时,您将看到其差异。

取自 here

或者您可以右键单击任何修订版本,然后选择比较 > 比较分支...

right-click menu

接下来,您可以选择要与哪个分支进行比较:

select branch

然后,您会得到一个差异窗口,列出了两个分支之间不同的文件,并为每个文件显示差异视图。

diff view


我在我的版本控制网格中选择了2个分支,但是在顶部菜单或右键单击时,我没有看到任何比较命令。 - Eric
1
我在底部窗格的标题中找到了它。有提交、文件树和差异。 - Eric

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

7

更新

Mac: 我现在使用SourceTree。强烈推荐。我特别喜欢你可以分阶段/取消分阶段的方式。

Linux: 我已经成功地使用了以下工具:

  • smartgit
  • GitKraken
  • meld

例如,在Ubuntu上安装smartgit


这个工具可以完成任务:

使用GUI diff工具如meld来运行git-diffall。请参阅此处的第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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接