git视觉差异在分支之间

时间:2012-10-16 10:45:53

标签: git diff

这个答案很适合在两个检查到git的文件之间看到视觉差异: How do I view 'git diff' output with a visual diff program?

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

git diff --name-status master dev

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

那里有什么更好的吗?

16 个答案:

答案 0 :(得分:215)

git diffrange一起使用。

git diff branch1..branch2

这将比较每个分支的提示。

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

答案 1 :(得分:85)

要查看两个分支之间所有差异的视觉差异,我想合并两个分支 - 没有提交合并 - 然后使用git gui或git Extensions来概述差异。

用于合并的Git命令行,无需提交:

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

完成后,您可以撤消与

的合并
git merge --abort

(h / t到@ jcugat的评论)

答案 2 :(得分:51)

如果您使用的是Intellij Idea IDE,则可以使用分支中的compare选项。

enter image description here

答案 3 :(得分:44)

您也可以使用gitk轻松完成此操作。

> gitk branch1 branch2

首先点击branch1的提示。现在右键单击branch2的提示并选择Diff this-> selected。

答案 4 :(得分:27)

对于那些使用TortoiseGit的Windows用户,你可以通过这个相当模糊的功能进行一些视觉比较:

  1. 导航至您要比较的文件夹
  2. 按住shift并右键单击
  3. 转到TortoiseGit - >浏览参考
  4. 使用ctrl选择两个分支进行比较
  5. 右键单击您的选择并单击"比较选定的参考"
  6. 来源:http://wikgren.fi/compare-diff-branches-in-tortoise-git-or-how-to-preview-changes-before-doing-a-merge/

答案 5 :(得分:19)

如果您使用的是OSX或Windows 7+,Atlassian SourceTree可以很好地完成此操作。这是免费的。

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

enter image description here

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

不幸的是,它似乎不会在* nix发行版anytime soon上提供。

答案 6 :(得分:13)

尝试" 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一起提到并默认为您当前的分支,它只是 - 例如与主人相比:

$  git difftool -d master..

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

答案 7 :(得分:8)

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

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

这将显示两者的比较。

答案 8 :(得分:8)

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

取自here

答案 9 :(得分:7)

更新

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

Linux:我取得了成功:

  • smartgit
  • GitKraken
  • meld

E.g。在Ubuntu上安装smartgit


这就是工作:

使用像GUI这样的GUI diff工具进行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

答案 10 :(得分:4)

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

Eclipse workspace compare

答案 11 :(得分:4)

您可以使用Perforce中的免费P4Merge来执行此操作:

img link

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

有关将其与Git集成的详细信息,请参见enter image description herehere

但上述链接的快速摘要是:

  • 将以下位放在〜/ .gitconfig中,然后您可以$ git difftool$ git diff使用p4merge
  • 请注意,[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\"" 仍然只使用默认的内联差异查看器:)(使用git版本1.8.2进行测试)

.gitconfig

的更改
@ApiIgnore
@RequestMapping("/unauthorize")
@Controller
public class UnauthorizeResource {}

答案 12 :(得分:2)

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

答案 13 :(得分:0)

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

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

对于这个视觉,我是git show-branch的忠实粉丝;它打破了一个组织良好的每个分支的提交表回到共同的祖先。 - 在具有多个分支的repo上尝试它,只需键入git show-branch并检查输出 - 有关示例的说明,请参阅Compare Commits Between Git Branches

答案 14 :(得分:0)

以下是如何在Visual Studio中查看整个提交之间的视觉差异,而不是单个文件(在VS 2017中测试)。不幸的是,它仅适用于一个分支内的提交:在“团队资源管理器”中,选择“分支”视图,右键单击存储库,然后选择“查看历史记录”,如下图所示。

enter image description here

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

有关比较Microsoft世界中分支的更多信息,请参阅此stackoverflow问题:Differences between git branches using Visual Studio

答案 15 :(得分:0)

您还可以使用vscode通过扩展CodeLense来比较分支,此SO已对此回答:How to compare different branches on Visual studio code