强制git show使用vimdiff显示diff

时间:2016-05-24 08:03:58

标签: git vim vimdiff

我该怎么做?在通过git config进行更改之后,我可以使用vimdiff来区分我的分阶段和提交的更改但是当我git show时,我仍然看到旧的简单风格的差异。我如何为git show开展这项工作?

4 个答案:

答案 0 :(得分:1)

使用git show,您可以显示提交(see the man page for reference)等对象。因此,您不会显示两个文件的差异,但会更改(可能是多个)文件。所以没有两个文件可以比较。但这正是vimdiff所做的,它并排打开两个文件并突出显示差异 当你使用git difftool之类的东西时,它会为diff的两边创建文件并使用工具(在你的情况下是vimdiff)来比较它们。 git show不会创建这些文件,因此vimdiff无法显示其输出。

tl; dr:git show是一个显示git对象的工具,而不是创建差异,所以它的输出不能用vimdiff显示为差异。

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

答案 1 :(得分:1)

没有参数的默认git show以及git show <object>显示提交中所有文件的更改。由于vimdiff一次只能比较一个文件,因此不能将它与这些选项一起使用。

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

git difftool SHA~:SHA -- <file>

如果您需要更多灵活性,可以随时使用git show获取文件的特定版本,并通过Process Substituion将其传递到vimdiff

export FILE=path/to/file; vimdiff <(git show SHA1:$FILE) <(git show SHA2:$FILE)

答案 2 :(得分:1)

尝试使用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'

要了解其工作原理,请熟悉this page

答案 3 :(得分:0)

以下对我有用的东西

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