我进行了一些更改以提交。如何查看为下一次提交准备的所有文件的差异?有一个方便的内衬吗?

gitstatus只显示暂存文件的名称,但我想查看实际的差异。

gitdiff(1)手册页显示:

git diff[--选项][--][…]此表单用于查看相对于索引所做的更改(下一次提交的暂存区域)。换句话说,这些差异是您可以告诉git进一步添加到索引中的,但您仍然没有。您可以使用gitadd(1)暂存这些更改。


当前回答

简单的图形使这一点更加清晰:

差异比较

显示工作目录和索引之间的更改。这将显示已更改但未准备提交的内容。

git diff—缓存

显示索引和HEAD之间的更改(这是该分支上的最后一次提交)。这将显示已添加到索引中并为提交而暂存的内容。

git diff头

显示工作目录和HEAD之间的所有更改(包括索引中的更改)。这将显示自上次提交以来的所有更改,无论它们是否为提交而暂存。

也:

365Git上有更多细节。

其他回答

您可以使用此命令。

git diff --cached --name-only

gitdiff的--cached选项表示获取暂存文件,--name only选项表示只获取文件的名称。

使用视觉差异工具

默认答案(在命令行)

此处的顶部答案正确显示了如何查看索引中缓存/暂存的更改:

$ git diff --cached

或$gitdiff——暂存,它是一个别名。



改为启动Visual Diff工具

默认答案将在gitbash(即在命令行或控制台中)输出diff更改。对于那些喜欢可视化表示分段文件差异的人,git中有一个脚本,它为每个查看的文件启动一个可视化差异工具,而不是在命令行上显示它们,称为difftool:

$ git difftool --staged

这将执行与git diff相同的操作——staged,但无论何时运行diff工具(即,每次diff处理文件时),它都将启动默认的可视化diff工具。(在我的环境中,这是VS代码,使用代码可执行文件)。

工具启动后,git diff脚本将暂停,直到您的可视化diff工具关闭。因此,您需要关闭每个文件才能看到下一个文件。



您可以始终使用difftool代替git命令中的diff

对于所有的视觉差异需求,gitdifftool将代替任何gitdiff命令,包括所有选项。

例如,要在不询问是否对每个文件执行此操作的情况下启动visualdiff工具,请添加-y选项(我认为通常您会希望这样做!!):

$ git difftool -y --staged

在这种情况下,它将一次一个地在视觉差异工具中提取每个文件,并在工具关闭后打开下一个文件。

或者查看在索引中暂存的特定文件的差异:

$ git difftool -y --staged <<relative path/filename>>

有关所有选项,请参阅手册页:

$ git difftool --help


设置Visual Git工具

要使用非默认的可视化git工具,请使用-t<tool>选项:

$ git difftool -t <tool> <<other args>>

或者,请参阅difftool手册页,了解如何配置git以使用不同的默认视觉差异工具。



vscode的示例.gitconfig条目作为diff/mmerge工具

设置difftool的一部分涉及更改.gitconfig文件,可以通过git命令在后台更改,也可以直接编辑。

您可以在主目录中找到.gitconfig,例如Unix中的~或Windows中的c:\users\<username>)。

或者,您可以使用Git-config-e-global在默认Git编辑器中打开user.gitconfig。

下面是我的全局用户.gitconfig中作为diff工具和merge工具的VS代码的示例条目:

[diff]
    tool = vscode
    guitool = vscode
[merge]
    tool = vscode
    guitool = vscode
[mergetool]
    prompt = true
[difftool "vscode"]
    cmd = code --wait --diff \"$LOCAL\" \"$REMOTE\"
    path = c:/apps/vscode/code.exe
[mergetool "vscode"]
    cmd = code --wait \"$MERGED\"
    path = c:/apps/vscode/code.exe

从1.7版及更高版本开始,应为:

git diff --staged

应该是:

git diff --cached

--缓存的方法显示缓存/索引中相对于当前HEAD的变化(即阶段性变化)--staged是--cached的同义词。

--staged和--cached并不指向HEAD,只是和HEAD不同。如果您使用git-add--patch(或git-add-p)选择要提交的内容,--staged将返回所提交的内容。

简单的图形使这一点更加清晰:

差异比较

显示工作目录和索引之间的更改。这将显示已更改但未准备提交的内容。

git diff—缓存

显示索引和HEAD之间的更改(这是该分支上的最后一次提交)。这将显示已添加到索引中并为提交而暂存的内容。

git diff头

显示工作目录和HEAD之间的所有更改(包括索引中的更改)。这将显示自上次提交以来的所有更改,无论它们是否为提交而暂存。

也:

365Git上有更多细节。