如何在像meld,kdiff3等差异查看器中查看`git show`的输出

But*_*840 38 git version-control diff dvcs

有许多SO问题显示如何git diff在差异查看器中查看命令的输出,如使用git difftool或其他方式.我不是在问git diff.

我想git show <previous commit sha1>在像diff这样的差异查看器中看到输出.我怎样才能做到这一点?

geo*_*ock 45

您可以使用它git difftool来显示单个提交.

假设您想要使用sha1查看提交abc123:

git difftool abc123~1 abc123
Run Code Online (Sandbox Code Playgroud)

(~1告诉git移动到之前的提交,abc123~1之前是提交abc123)

如果你经常使用它,你可以制作一个自定义的git命令,使其更容易:

  1. 使用以下内容创建一个名为git-showtoolsomewhere 的文件$PATH:

    git difftool $1~1 $1
    
    Run Code Online (Sandbox Code Playgroud)
  2. 授予该文件执行权限:

    chmod +x ~/path/to/git-showtool
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用该命令 git showtool <sha1 or tag or ...>

  4. 利润.

  • 如果我们正在审查合并提交,则 `git show $commit` 不等于 `git difftool $commit~1 $commit`。git show 以特殊格式呈现合并提交,由 `git diff-tree --cc $commit` 生成。请参阅 https://git-scm.com/docs/git-show (2认同)

sag*_*ian 18

基于georgebrock的响应,您可以在.gitconfig中创建一个别名,如下所示:

showtool = "!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1"
Run Code Online (Sandbox Code Playgroud)

然后你可以运行它git showtool abc123(无需为此创建单独的shell脚本).如果省略修订版,它将默认为HEAD.


Mic*_*iak 9

翻译sagittarian对git savvy的建议,如果你是windows用户,请将它添加到你的全局.gitconfig文件中,该文件位于C:\ Users [用户名]中:

[alias]
    showtool = "!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1"
Run Code Online (Sandbox Code Playgroud)

或者您可以在get bash shell中执行以下命令:

git config --global alias.showtool '!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1'
Run Code Online (Sandbox Code Playgroud)

这将为您更改.gitconfig文件.


小智 5

基于 sagitarrian 的回答,这里有一个更通用的 rev 语法的小改动:

showtool = "!showci () { rev=$(git rev-parse \"${*:-HEAD}\"); git difftool $rev~1 $rev; }; showci"
Run Code Online (Sandbox Code Playgroud)

rev-parse用来透明地允许复杂的 rev 表达式。

$1在最后删除了,因为调用别名后跟参数;它仅在使用时被忽视,$1但会破坏$*行为。

这允许做一些不错的事情,例如:

git showtool :/some nasty bug
Run Code Online (Sandbox Code Playgroud)