强制使用vimdiff模式显示git show的差异

5

我该怎么做?通过使用git config进行更改后,我可以使用vimdiff查看我的暂存和已提交的更改的差异,但是当我执行git show时,我仍然看到旧的普通样式差异。我如何使其在git show中也生效?


可能是 https://dev59.com/uF4c5IYBdhLWcg3wVo9I 的重复问题。 - anujm
4个回答

4

尝试使用Git别名。这是用于git show命令的。

git config --global alias.s difftool\ HEAD^\ HEAD

以下是关于 git show <revision> 的内容:

git config --global alias.s '!f() { rev=${1-HEAD}; git difftool $rev^ $rev; }; f'

想要了解它的工作原理,请熟悉此页面


实际上这是一个非常好的答案,正是我在寻找的。它不仅适用于HEAD,而且适用于任何提交,并且可以使用“--”显示文件名。通过使用“git config difftool.prompt false”禁用“启动'vimdiff'[Y/n]”提示效果更好。谢谢。 - egelev
我认为第二种方法是我正在寻找的那一个。你能解释一下^符号的含义吗? - Chan Kim
1
嘿 @ChanKim ,抱歉让你等这么久。如果还有意义的话,"^" 代表 "parent",所以表达式 "HEAD^" 意味着是 HEAD 的父提交。或者简单来说,就是前一个提交。你可以像这样串联它们 "HEAD^^^",意思和 "HEAD~3" 是一样的,也就是 "HEAD" 前面的 3 个提交。希望对你有帮助。 - Yuri Pozniak

4

以下方法适用于我:

git difftool SHA^..SHA -- <file>

谢谢!对于其他人来说,例如,执行 git difftool 0f27151b7^..0f27151b7 src/main.c - Chan Kim

3

默认情况下,git show命令不带参数以及git show <object>命令会显示提交中所有文件的更改。由于vimdiff只能比较单个文件,因此您无法在使用这些选项时使用它。

但是,git show <object> -- <file>命令会显示提交中单个文件的更改。您可以通过运行difftool命令来在vimdiff中显示更改:

git difftool SHA~:SHA -- <file>

如果需要更多的灵活性,您总是可以使用git show来获取特定版本的文件,并通过Process Substitution将它们传递给vimdiff。
export FILE=path/to/file; vimdiff <(git show SHA1:$FILE) <(git show SHA2:$FILE)

2
使用git show命令可以显示对象,如提交记录(有关详细信息,请参阅手册)。因此,您不会显示两个文件的差异,而是显示一个或多个文件的更改。因此,并没有可以进行比较的两个文件。但这正是vimdiff所做的,它会并排打开两个文件并突出显示差异。
当您使用git difftool或类似工具时,它将为差异的两侧创建文件,并使用该工具(在您的情况下为vimdiff)进行比较。 git show不会创建这些文件,因此无法使用vimdiff显示其输出。

简而言之:git show是一种显示git对象而不是创建差异的工具,因此无法使用vimdiff显示其输出作为差异。

您可能想要使用git difftool。它将为每个修改的文件打开gvimdiff。
您可以使用git diff的常规选项来比较不同的提交。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接