有许多 SO 问题显示了如何git diff
在 diff 查看器中查看命令的输出,例如使用 meldgit difftool
或其他方式。我不是在问git diff
。
我想在 meld 之git show <previous commit sha1>
类的差异查看器中查看输出。我怎样才能做到这一点?
有许多 SO 问题显示了如何git diff
在 diff 查看器中查看命令的输出,例如使用 meldgit difftool
或其他方式。我不是在问git diff
。
我想在 meld 之git show <previous commit sha1>
类的差异查看器中查看输出。我怎样才能做到这一点?
您可以使用git difftool
来显示单个提交。
假设您想使用 sha1 查看提交abc123
:
git difftool abc123~1 abc123
(~1
告诉 git 移动到上一个提交,之前abc123~1
的提交也是如此abc123
)
如果你经常使用它,你可以制作一个自定义的 git 命令来使它更容易:
git-showtool
在您的某处创建一个名为的文件$PATH
,其中包含以下内容:
git difftool $1~1 $1
授予该文件执行权限:
chmod +x ~/path/to/git-showtool
使用命令git showtool <sha1 or tag or ...>
基于 georgebrock 的响应,您可以在 .gitconfig 中创建一个别名,如下所示:
showtool = "!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1"
然后您可以运行它git showtool abc123
(无需为此创建单独的 shell 脚本)。如果您忽略修订,它将默认为 HEAD。
翻译射手座对不太懂 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文件。
基于射手座的回答,这里有一个更通用的 rev 语法的小改动:
showtool = "!showci () { rev=$(git rev-parse \"${*:-HEAD}\"); git difftool $rev~1 $rev; }; showci"
我rev-parse
用来透明地允许复杂的 rev 表达式。
我删除了$1
最后的,因为别名被调用,后面跟着参数;它仅在使用时会被忽视,$1
但会破坏$*
行为。
这允许做一些好事,比如:
git showtool :/some nasty bug
Geogrebrock 的答案很好,但可以改进:
commit=$1
shift
git difftool $commit~1 $commit $@
将它放在 $PATH 中某处的可执行文件 (chmod +x) 中。
现在您可以传递其他参数,例如指定您想要查看的文件(并忽略其他文件):
$ git showtool 6a40ec6ffb9338b0548aefab92fded1bffb1648a -- src-cmn/
PATH 中的git-showcommit
文件(可执行文件)应如下所示:
#!/bin/bash
git difftool --dir-diff $1^..$1
git showcommit HEAD
那么您可以简单地通过或调用新工具git showcommit a5b26d5