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


当前回答

你可以使用sdiff做一个并排的diff,如下所示:

$ git difftool -y -x sdiff  HEAD^ | less

其中HEAD^是一个例子,你应该用任何你想要反对的东西来替换它。

我在这里找到了这个解决方案,还有一些其他的建议。然而,这一个答案是OP的问题简洁而清楚。

有关这些论点的解释,请参阅man git-difftool。


把注释记在板上,你可以通过编写以下可执行脚本创建一个方便的git sdiff命令:

#!/bin/sh
git difftool -y -x "sdiff -w $(tput cols)" "${@}" | less

保存为/usr/bin/git-sdiff并chmod +x它。然后你就可以这样做了:

$ git sdiff HEAD^

额外的小费

正如评论中所建议的,你可以使用icdiff来做sdiff对彩色输出所做的事情:

$ more /usr/bin/git-sdiff
#!/bin/sh
git difftool -y -x "icdiff --cols $(tput cols)" "${@}" | less --raw-control-chars

其他回答

export GIT_EXTERNAL_DIFF='meld $2 $5; echo >/dev/null'

然后简单的:

git diff

尽管Git有一个diff的内部实现,但是您可以设置一个外部工具。

有两种不同的方法来指定外部差异工具:

设置GIT_EXTERNAL_DIFF和GIT_DIFF_OPTS环境变量。 通过git config配置外部diff工具

Ymattw的答案也非常简洁,使用ydiff

参见:

https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration Git diff——救命 http://www.pixelbeat.org/programming/diffs/

在执行git diff时,git会检查上述环境变量的设置及其.gitconfig文件。

默认情况下,Git将以下七个参数传递给diff程序:

path  old-file  old-hex old-mode  new-file  new-hex new-mode

通常只需要old-file和new-file参数。当然,大多数diff工具只接受两个文件名作为参数。这意味着您需要编写一个小的包装器脚本,它接受Git提供给脚本的参数,并将它们传递给您选择的外部Git程序。

假设你把你的包装脚本放在~/scripts/my_diff.sh下面:

#!/bin/bash
# un-comment one diff tool you'd like to use

# side-by-side diff with custom options:
# /usr/bin/sdiff -w200 -l "$2" "$5" 

# using kdiff3 as the side-by-side diff:
# /usr/bin/kdiff3 "$2" "$5"

# using Meld 
/usr/bin/meld "$2" "$5"

# using VIM
# /usr/bin/vim -d "$2" "$5"

然后你需要使该脚本可执行:

chmod a+x ~/scripts/my_diff.sh

然后,您需要告诉Git如何以及在哪里找到您的自定义差异包装器脚本。 你有三个选择如何做到这一点:(我更喜欢编辑.gitconfig文件)

使用GIT_EXTERNAL_DIFF, GIT_DIFF_OPTS 例如,在你的.bashrc或.bash_profile文件中,你可以设置: GIT_EXTERNAL_DIFF = $ HOME /脚本/ my_diff.sh 出口GIT_EXTERNAL_DIFF 使用git配置 使用“git config”来定义你的包装器脚本可以在哪里找到: Git配置——global diff.external ~/scripts/my_diff.sh 编辑~/。gitconfig文件 您可以编辑~/。Gitconfig文件添加这些行: (diff) External = ~/scripts/my_diff.sh

注意:

与安装自定义diff工具类似,您还可以安装一个自定义合并工具,它可以是一个可视化的合并工具,以更好地帮助可视化合并。(参见progit.org页面)

参见:http://fredpalma.com/518/visual-diff-and-merge-tool/和https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration

打开Intellij IDEA,在“版本控制”工具窗口中选择单个或多个提交,浏览更改的文件,然后双击它们,并排检查每个文件的更改。

使用捆绑的命令行启动器,您可以在任何地方使用简单的IDEA some/path启动IDEA

在这个帖子里有很多很好的答案。对于这个问题,我的解决方案是编写一个脚本。

将其命名为“git-scriptname”(并使其可执行并将其放在您的PATH中,就像任何脚本一样),您可以像正常的git命令一样通过运行调用它

$ git scriptname

实际的功能在最后一行。来源如下:

#!/usr/bin/env zsh
#
#   Show a side-by-side diff of a particular file how it currently exists between:
#       * the file system
#       * in HEAD (latest committed changes)

function usage() {
    cat <<-HERE
    USAGE

    $(basename $1) <file>

    Show a side-by-side diff of a particular file between the current versions:

        * on the file system (latest edited changes)
        * in HEAD (latest committed changes)

HERE
}

if [[ $# = 0 ]]; then
    usage $0
    exit
fi

file=$1
diff -y =(git show HEAD:$file) $file | pygmentize -g | less -R

当我在寻找一种使用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选项与颜色设置一起具有非常有用的可见性,与标准行差异相比,当浏览带有小行更改的大文件时,可以获得彩色的并排源代码体验。