git视觉差异在分支之间

Sno*_*ash 189 git diff

这个答案很适合在两个检查到git的文件之间看到视觉差异: 如何使用visual diff程序查看'git diff'输出?

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

git diff --name-status master dev
Run Code Online (Sandbox Code Playgroud)

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

那里有什么更好的吗?

ale*_*lex 220

使用git diff范围.

git diff branch1..branch2
Run Code Online (Sandbox Code Playgroud)

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

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

  • 在Linux系统中,我建议安装`Meld`,然后使用`git config --global diff.tool meld`将其设置为默认的`difftool`,最后使用`git difftool branch1..branch2启动它而不是普通`diff`. .结果看起来好多了. (31认同)
  • 这不是视觉上的母鹿.;) (27认同)
  • 使用[Meld](http://meldmerge.org/)visual difftool而不使用git config:`git difftool -t meld branch1..branch2` (6认同)
  • 对于读者:在我的帖子中,除了这个答案之外,这里的每个答案都提供了一种方法来执行该人的要求(GUI 中的差异)。 (3认同)
  • @GHuxley OP在哪里要求GUI解决方案? (3认同)
  • @alex 他们要求提供“视觉差异”,这是图形(甚至 ASCII 艺术)视觉差异显示的确切术语 (2认同)
  • 我必须同意@GHuxley - 他要求提供视觉差异,而不是命令行差异。 (2认同)

Tor*_*tad 93

为了看到两个分支之间所有差异的视觉差异,我想合并两个分支 - 没有提交合并 - 然后使用git gui或git扩展来获得差异的概述.

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

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

完成后,您可以撤消合并

git merge --abort

(h/t @ jcugat的评论)

  • When you're done, undo the merge with `git merge --abort` (18认同)
  • 如果您喜欢使用IDE(或其他不易于集成的Git GUI difftool),请不要低估这种方法的相关性!这个选项对我来说很棒,因为我使用Intellij并且非常喜欢能够在IDE中旋转修改过的文件,包括语法突出显示,错误突出显示,死代码突出显示,可编辑的原创荣耀.我使用这种方法进行所有代码审查,并且我在GitHub中远远落后于糟糕的拉取请求比较工具.我甚至可以随时进行编辑,完成后我只需创建一个附加"-code-review"的新分支并提交! (10认同)
  • 只要没有合并冲突,它就可以工作,并且在有任何合并冲突时失败。 (2认同)

Kam*_*ddy 54

如果您使用的是Intellij Idea IDE,则只需使用分支中的compare选项即可.

在此输入图像描述


Mar*_*tin 45

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

> gitk branch1 branch2
Run Code Online (Sandbox Code Playgroud)

首先单击branch1的提示.现在右键单击branch2的尖端,然后选择Diff this-> selected.

  • 使用`gitk branch1..branch2`只显示两个修订版之间的提交. (7认同)

Ove*_*rch 29

对于那些使用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/


Jor*_*ker 20

如果您使用的是OSX或Windows 7+,Atlassian SourceTree可以很好地使用它.这是免费的.

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

在此输入图像描述

假设您已经签出了一个功能分支,并且想要查看与"master"相关的差异,请右键单击"master"分支并选择"Diff against current"

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

  • 它可能是"免费的",但它肯定需要一些时间来阅读他们的注册使用条款:https://www.atlassian.com/legal/customer-agreement我到目前为止都喜欢这个工具,但这可能会让我失望. (3认同)

Pau*_*ler 15

尝试"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]:
...
Run Code Online (Sandbox Code Playgroud)

或者正如@ rsilva4所提-d及的那样默认为当前分支它只是 - 例如与master相比:

$  git difftool -d master..
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢,这很有用.添加-d选项会让事情变得更好:`git difftool -d their-abc my-abc` (3认同)

Arr*_*ron 8

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

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

这将显示两者的比较.

  • 或者只是`github.com/url/to/your/repo/compare /`然后你可以选择分支 (2认同)

Mah*_*vcs 8

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

取自这里


Sno*_*ash 7

UPDATE

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


这样做的工作:

使用像meld这样的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


Ale*_*isi 5

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

Eclipse 工作区比较