有许多SO问题展示了如何使用git difftool
或其他方式将git diff
命令的输出在诸如meld之类的差异查看器中查看。然而,我并不是在询问git diff
。
我想在像meld这样的差异查看器中查看git show <previous commit sha1>
的输出。我该怎么做?
有许多SO问题展示了如何使用git difftool
或其他方式将git diff
命令的输出在诸如meld之类的差异查看器中查看。然而,我并不是在询问git diff
。
我想在像meld这样的差异查看器中查看git show <previous commit sha1>
的输出。我该怎么做?
你可以使用git difftool
来显示单个提交。
比如,如果你想看sha1为abc123
的提交:
git difftool abc123~1 abc123
(~1
告诉git要移到前一个提交,因此abc123~1
是abc123
之前的提交)
如果你经常使用这个功能,可以创建一个自定义git命令来使它更容易:
在你的$PATH
中某个地方创建一个名为git-showtool
的文件,并将以下内容复制进去:
git difftool $1~1 $1
赋予该文件执行权限:
chmod +x ~/path/to/git-showtool
使用命令 git showtool <SHA1或标签或...>
git show $commit
与git difftool $commit~1 $commit
不等效。git show
以git diff-tree --cc $commit
生成的特殊格式呈现合并提交。请参见 https://git-scm.com/docs/git-show。 - Abdul Rauf^
,例如git difftool abc123^ abc123
来进行父级提交。多次应用可以向上跳树,例如abc123^^^
。 - jocull在georgebrock的回答基础上,您可以在.gitconfig中创建一个别名,类似于这样:
showtool = "!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1"
然后您可以使用 git showtool abc123
运行它(无需创建单独的 shell 脚本)。如果省略版本,它将默认为 HEAD。
对于不太熟悉git的人,将Sagittarian的建议添加到您的全局.gitconfig文件中。如果您是Windows用户,该文件位于C:\ Users [用户名] 下:
[alias]
showtool = "!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1"
或者您可以在获取bash shell中执行以下命令:
git config --global alias.showtool '!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1'
这将为您自动更改.gitconfig文件。
在sagitarrian的回答基础上,这里有一个更通用的rev语法的小改变:
showtool = "!showci () { rev=$(git rev-parse \"${*:-HEAD}\"); git difftool $rev~1 $rev; }; showci"
我使用rev-parse
来透明地允许复杂的rev表达式。
我删除了结尾处的$1
,因为别名被调用后跟随参数;当仅使用$1
时不会引起注意,但会破坏$*
的行为。
这使得可以做出很好的事情,例如:
git showtool :/some nasty bug
git config --global alias.showtool '!showci () { rev=$(git rev-parse "${*:-HEAD}"); git difftool $rev~1 $rev; }; showci'
- David CookGeogrebrock的回答不错,但可以进一步改进:
commit=$1
shift
git difftool $commit~1 $commit $@
将它放在可执行文件(chmod +x)中的某个$PATH位置。
现在您可以传递附加参数,例如指定要查看的文件(并忽略其他文件):
$ git showtool 6a40ec6ffb9338b0548aefab92fded1bffb1648a -- src-cmn/
PATH 中的 git-showcommit
文件(可执行文件)应该如下:
#!/bin/bash
git difftool --dir-diff $1^..$1
然后你可以通过 git showcommit HEAD
或者 git showcommit a5b26d5
来调用这个新工具。
gitk
,gitg
等等都是常见的。 - twalberg