我上演了一些改变;如何查看为下次提交而暂存的所有文件的差异?我知道 git状态,但我想看到实际的差异 - 而不仅仅是分阶段文件的名称。
我看到了 GIT-DIFF(1) 手册页说
git diff [--options] [ - ] [...]
此表单用于查看您对索引所做的更改(下一次提交的暂存区域)。换句话说,差异就是你 可以 告诉git进一步添加到索引但你还没有。您可以使用git-add(1)暂存这些更改。
不幸的是,我无法理解这一点。必须有一些方便的单行,我可以创建一个别名,对吗?
它应该只是:
git diff --cached
--cached
表示相对于当前的缓存/索引(即分阶段更改)的变化 HEAD
。 --staged
是...的同义词 --cached
。
--staged
和 --cached
不指向 HEAD
,只是差异 HEAD
。如果你樱桃选择使用什么 git add --patch
(要么 git add -p
) --staged
将返回上演的内容。
一个简单的图形使这更清楚:

git diff
显示工作目录和索引之间的更改。这显示了已更改的内容,但未提交提交。
git diff --cached
显示索引和HEAD之间的更改(这是此分支上的最后一次提交)。这显示了已添加到索引并为提交暂存的内容。
git diff HEAD
显示工作目录和HEAD之间的所有更改(包括索引中的更改)。这显示了自上次提交以来的所有更改,无论它们是否已提交进行提交。
也:
有更详细的信息 365Git。
如果您对视觉并排视图感兴趣,那么 扩散 视觉差异工具可以做到这一点。它甚至会显示三个窗格,如果某些但不是所有的更改都会上演。在冲突的情况下,甚至会有四个窗格。

用它调用它
diffuse -m
在你的Git工作副本中。
如果你问我,十年来我见过的最好的视觉效果。此外,它并不特定于Git:它与许多其他VCS互操作,包括SVN,Mercurial,Bazaar,......
也可以看看: 在git diff中显示分段和工作树?
注意 git status -v
也 显示上演的变化!
(意思是你需要上演 - git add
- 一些变化。没有阶段性的变化,没有差异化 git status -v
。
从那以后就这样做了 Git 1.2.0,2006年2月)
以长形式(默认), git status
有一个未记录的“详细”选项,它实际显示HEAD和索引之间的差异。
它即将变得更加完整:见“在git diff中显示分段和工作树?“(git 2.3.4 +,2015年第2季度):
git status -v -v
您可以使用此命令。
git diff --cached --name-only
该 --cached
的选择 git diff
意味着获取暂存文件,以及 --name-only
选项意味着只获取文件的名称。
使用可视DIFF工具
默认答案(在命令行)
这里的最佳答案正确显示了如何查看缓存/暂存的更改 Index
:
$ git diff --cached
要么 $ git diff --staged
这是别名。
相反,启动Visual Diff工具
默认答案将在git bash(即命令行或控制台)中吐出diff变化。对于那些喜欢分阶段文件差异的可视化表示的人来说,git中有一个脚本可以为每个查看的文件启动一个可视化差异工具,而不是在命令行上显示它们, difftool
:
$ git difftool --staged
这将做同样的事情 git diff --staged
除了运行diff工具的任何时候(即每次文件由diff处理),它都会启动默认的visual diff工具(在我的环境中,这是 kdiff3)。
工具启动后,git diff脚本将暂停,直到您的可视化差异工具关闭。因此,您需要关闭每个文件才能看到下一个文件。
你总能使用 difftool
代替 diff
在git命令中
满足您所有的视觉差异需求, git difftool
将代替任何工作 git diff
命令,包括所有选项。
例如,要启动可视化差异工具而不询问是否为每个文件执行此操作,请添加 -y
选项(我想通常你会想要这个!!):
$ git difftool -y --staged
在这种情况下,它将在视觉差异工具中拉出每个文件,一次一个,在工具关闭后调出下一个文件。
或者查看在其中暂存的特定文件的差异 Index
:
$ git difftool -y --staged <<relative path/filename>>
有关所有选项,请参见手册页:
$ git difftool --help
设置Visual Git工具
要使用默认值以外的可视git工具,请使用 -t <tool>
选项:
$ git difftool -t <tool> <<other args>>
或者,请参阅difftool手册页,了解如何配置git以使用其他默认的可视化差异工具。
如果您有多个具有分阶段更改的文件,则使用它可能更实用 git add -i
,然后选择 6: diff
,最后选择您感兴趣的文件。
如果您的目的是推送目标远程repo分支并且您在提交更改日志中的第一次传递不完整,则可以在推送之前更正提交语句。
本地
......做一些改变......
git diff # look at unstaged changes
git commit -am"partial description of changes"
...回想一下未提及的更多变化......
git diff origin / master#查看暂存但未推送的更改
...修改分阶段提交声明......
git commit --amend -m"i missed mentioning these changes ...."
git push