当我输入git diff时,我希望看到一个并排的diff,就像用diff -y一样,或者像在kdiff3这样的交互式diff工具中显示diff。如何做到这一点呢?


当前回答

我个人非常喜欢icdiff !

如果你在Mac OS X上使用HomeBrew,只需安装icdiff即可。

为了获得正确的文件标签,加上其他很酷的功能,我在~/.gitconfig中有:

[pager]
    difftool = true
[diff]
    tool = icdiff
[difftool "icdiff"]
    cmd = icdiff --head=5000 --highlight --line-numbers -L \"$BASE\" -L \"$REMOTE\" \"$LOCAL\" \"$REMOTE\"

我用git difftool

其他回答

当我在寻找一种使用git内置方式来定位差异的快速方法时,这个问题出现了。我的解决方案标准:

快速启动,需要内置选项 可以处理多种格式,xml,不同的编程语言 快速识别大文本文件中的小代码更改

我找到这个答案是为了给git上色。

为了获得并排diff而不是行diff,我调整了mb14在这个问题上的优秀答案,使用以下参数:

$ git diff --word-diff-regex="[A-Za-z0-9. ]|[^[:space:]]"

如果你不喜欢额外的[-或{+选项——word-diff=color可以使用。

$ git diff --word-diff-regex="[A-Za-z0-9. ]|[^[:space:]]" --word-diff=color

这有助于与json和xml文本以及java代码进行适当的比较。

总之,——word-diff-regex选项与颜色设置一起具有非常有用的可见性,与标准行差异相比,当浏览带有小行更改的大文件时,可以获得彩色的并排源代码体验。

尝试 git difftool

使用git difftool而不是git diff,你将永远不会回到过去。

UPDATE添加一个示例用法:

这是另一个关于git difftool的stackoverflow的链接:我如何用我喜欢的diff工具/查看器查看'git diff'输出?

对于较新版本的git, difftool命令支持许多即时可用的外部diff工具。例如vimdiff是自动支持的,可以通过以下方式从命令行打开:

cd /path/to/git/repo
git difftool --tool=vimdiff

其他支持的外部diff工具通过git difftool列出——tool-help这里是一个示例输出:

'git difftool --tool=<tool>' may be set to one of the following:
        araxis
        kompare
        vimdiff
        vimdiff2

The following tools are valid, but not currently available:
        bc3
        codecompare
        deltawalker
        diffuse
        ecmerge
        emerge
        gvimdiff
        gvimdiff2
        kdiff3
        meld
        opendiff
        tkdiff
        xxdiff

对于unix,只组合git和内置的diff:

git show HEAD:path/to/file | diff -y - path/to/file

当然,您可以用任何其他git引用替换HEAD,并且您可能希望在diff命令中添加-W 170之类的东西。

这里假设您只是将您的目录内容与过去的提交进行比较。两个提交之间的比较比较复杂。如果你的shell是bash,你可以使用“进程替换”:

diff -y -W 170 <(git show REF1:path/to/file) <(git show REF2:path/to/file)

其中REF1和REF2是git引用-标签,分支或哈希。

这可能是一个有点有限的解决方案,但在没有外部工具的情况下使用系统的diff命令完成工作:

diff -y  <(git show from-rev:the/file/path) <(git show to-rev:the/file/path)

仅过滤更改行使用——suppress-common-lines(如果您的diff支持该选项)。 在这种情况下,没有颜色,只有通常的不同标记 可以调整列宽度-width=term-width;在Bash中可以获取宽度为$COLUMNS或tput cols。

为了更方便,这也可以被包装到一个helper git-script中,例如,这样使用:

git diffy the/file/path --from rev1 --to rev2

我最近实现了一个这样做的工具:https://github.com/banga/git-split-diffs

下面是如何使用它:

npm install -g git-split-diffs

git config --global core.pager "git-split-diffs --color | less -RFX"

这是它在终端中的外观(使用默认主题):

如您所见,它还支持语法高亮显示和行中更改的单词高亮显示