Git分支之间的视觉差异

这个答案对于查看检入git的两个文件之间的视觉差异是很好的: 如何查看'git diff'输出与视觉差异程序? < / p >

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

git diff --name-status master dev

这不是很有信息量,也不是很直观。

还有更好的吗?

256358 次浏览

使用git diff范围

git diff branch1..branch2

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

如果你真的想要一些GUI软件,你可以尝试像SourceTree这样的软件,它支持Mac OS X和Windows。

更新

麦克:我现在用SourceTree。彻底的建议。我特别喜欢你摆/摆帅哥的方式。

Linux:我成功地使用过:

  • smartgit
  • GitKraken
  • meld

例如,在Ubuntu上安装smartgit:


这是可行的:

git-diffall使用GUI diff工具,如meld。见第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

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

Git命令行用于合并而不提交:

git checkout branchA
git merge --no-commit --no-ff branchB

完成后,可以撤消与的合并

git merge --abort

(h/t @jcugat’s的评论)

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

enter image description here

如果你正在使用github,你可以使用这个网站:

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

这将向你展示两者的比较。

尝试“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和默认到你的当前分支,它只是-例如compare to master:

$  git difftool -d master..

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

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

> gitk branch1 branch2

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

如果您使用Eclipse,您可以直观地比较工作区中的当前分支与另一个标记/分支:

Eclipse workspace compare

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

取自在这里

或者您可以右键单击任何修订,并选择比较>比较分支…

右键菜单

然后你可以选择与哪个分支进行比较:

select branch

最后,您会看到一个Diff窗口,列出两个分支之间不同的文件,对于每个文件,它都会显示一个Diff视图。

diff view

如果你使用的是OSX或Windows 7+, Atlassian SourceTree非常适用于此。它是免费的。

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

enter image description here

假设你已经签出了一个功能分支,你想要查看与'master'的差异,右键单击'master'分支并选择“diff against current”。

不幸的是,它似乎不会出现在*nix发行版很快上。

对于那些在Windows上使用TortoiseGit的人来说,你可以通过这个相当晦涩的功能来进行一些直观的比较:

  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/

你也可以使用Perforce中的免费P4Merge来做到这一点:

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

enter image description here

关于将其与Git集成的详细信息可以在在这里在这里中找到

但从以上链接中快速总结如下:

  • 在~/中放入以下位。然后你可以执行$ 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\""

如果你使用优秀的WebStorm编辑器,你可以与任何你想要的分支进行比较:

Webstorm git compare

看看git show-branch

你可以用git的核心功能做很多事情。在你的可视化差异中指定你想要包含的内容可能会很好。大多数答案关注的是逐行提交的差异,而你的例子关注的是在给定提交中受影响的文件的名称。

似乎没有解决的一个可视化问题是如何查看分支包含的提交(无论是共同的还是唯一的)。

对于这个视觉效果,我是git show-branch的忠实粉丝;它将每个分支的提交分解成一个组织良好的表,返回到公共祖先。 -在有多个分支和分歧的回购上尝试它,只需键入git show-branch并检查输出 -有关示例的详细描述,请参见比较Git分支之间的提交

下面是如何在visual Studio中看到整个提交与单个文件之间的视觉差异(在VS 2017中测试)。不幸的是,它只适用于一个分支中的提交:在“团队资源管理器”中,选择“分支”视图,右键单击回购,并选择“查看历史”,如下图所示。

enter image description here

然后,当前分支的历史记录出现在主区域中。(之前在当前分支上提交的分支被标记为标签。)现在用Ctrl-Left选择几个提交,然后右键单击并从弹出菜单中选择“Compare commit…”。

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

你也可以使用vscode来比较使用CodeLense扩展的分支,这已经在这个SO: 如何比较Visual studio代码上的不同分支中得到了回答