55

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

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

4

6 回答 6

64

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

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

git difftool abc123~1 abc123

~1告诉 git 移动到上一个提交,之前abc123~1的提交也是如此abc123

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

  1. git-showtool在您的某处创建一个名为的文件$PATH,其中包含以下内容:

    git difftool $1~1 $1
    
  2. 授予该文件执行权限:

    chmod +x ~/path/to/git-showtool
    
  3. 使用命令git showtool <sha1 or tag or ...>

  4. 利润。
于 2013-07-09T21:37:07.347 回答
24

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

showtool = "!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1"

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

于 2015-01-15T12:05:15.280 回答
13

翻译射手座对不太懂 git 的建议,如果您是 Windows 用户,请将其添加到位于C:\Users[user name]中的全局.gitconfig文件中:

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

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

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

这将为您更改.gitconfig文件。

于 2015-11-28T19:31:17.420 回答
5

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

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

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

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

这允许做一些好事,比如:

git showtool :/some nasty bug
于 2017-03-22T15:48:42.047 回答
2

Geogrebrock 的答案很好,但可以改进:

commit=$1
shift
git difftool $commit~1 $commit $@

将它放在 $PATH 中某处的可执行文件 (chmod +x) 中。

现在您可以传递其他参数,例如指定您想要查看的文件(并忽略其他文件):

$ git showtool 6a40ec6ffb9338b0548aefab92fded1bffb1648a -- src-cmn/
于 2017-05-08T08:21:55.863 回答
0

PATH 中的git-showcommit文件(可执行文件)应如下所示:

#!/bin/bash

git difftool --dir-diff $1^..$1

git showcommit HEAD那么您可以简单地通过或调用新工具git showcommit a5b26d5

于 2019-05-09T08:46:16.590 回答