我如何显示已经上演的变化?

我提出了一些改变, 我怎么能看到下一个提交的所有文件的差异? 我知道git的状态 ,但我想看看实际的差异 – 不仅仅是上演的文件的名字。

我看到了git-diff(1)手册页说

git diff [–options] [ – ] […]

这种forms是查看你所做的相对于索引的变化(下一次提交的登台区域)。 换句话说,差异是你可以告诉git进一步添加到索引,但你还没有。 你可以通过使用git-add(1)来完成这些更改。

不幸的是,我不太明白这一点。 必须有一些方便的一行,我可以创build一个别名,对吗?

它应该是:

 git diff --cached 

--cachedcaching意味着显示caching/索引(即分阶段更改)对当前HEAD更改。 --staged--cached的同义词。

编辑

为了澄清上述说明,– --staged--cached并不指向HEAD ,只是与HEAD有所不同。 如果你select使用git add --patch (或git add -p )来提交什么,– --staged将返回上演的内容。

一个简单的graphics使这个更清晰:

简单的Git差异

git diff

显示工作目录和索引之间的更改。 这显示了什么已经改变,但没有提交一个提交。

git diff –cached

显示索引和HEAD(这是该分支上的最后一个提交)之间的更改。 这显示了已经添加到索引的内容,并提交了一个提交。

git diff HEAD

显示工作目录和HEAD(其中包括索引中的更改)之间的所有更改。 这显示了自上次提交以来所做的所有更改,无论它们是否已提交或未提交。

另外

365Git有更多的细节。

如果你对可视化的并行视图感兴趣, diffuse visual diff工具可以做到这一点。 它甚至会显示三个窗格,如果一些但不是所有的变化都上演。 在冲突的情况下,甚至会有四个窗格。

漫画与分阶段和非持续的编辑截图

用它来调用它

 diffuse -m 

在你的Git工作副本中。

如果你问我,我已经看了十年的最好的视觉差异。 另外,它不是特定的Git:它与其他VCS,包括SVN,Mercurial,Bazaar等多得多的互操作…

另请参见: 在git diff中显示staged和working tree?

请注意, git status -v 显示阶段性的变化! (这意味着你需要上演 – git add – 一些变化,没有阶段性变化,没有git status -v diff。
它从2006年2月份的Git 1.2.0开始 )

在其长forms(默认), git status有一个未公开的“详细”选项,实际上显示HEAD和索引之间的差异。

它将变得更加完整:请参阅“ 在git diff中同时显示staged和working tree? ”(git 2.3.4+,Q2 2015):

 git status -v -v 

你可以使用这个命令。

 git diff --cached --name-only 

git diff--cached选项意味着获取staged文件,而--name-only选项意味着只获取文件的名字。

从1.7版本开始,它应该是:

 git diff --staged 

如果你有多个分阶段修改的文件,可以使用git add -i ,然后select6: diff ,最后select你感兴趣的文件。

如果您的意图是推送一个远程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 

对于Staging Area vs Repository比较使用

 $git diff --staged 

对于工作与存储库比较使用

 $ git diff 

但如果一个文件被改变并添加到暂存区域( $ git add fileName ),我们尝试看看( $ git diff )的$ git diff 。 它将不会返回任何区别,因为文件处于暂存区域,不会与存储库进行比较。

使用可视差分工具

默认答案(在命令行)

这里的最佳答案正确地显示了如何查看Index的caching/分阶段更改:

 $ git diff --cached 

$ git diff --staged这是一个别名。

启动Visual Diff工具

默认的答案会在git bash(即在命令行或在控制台)吐出diff变化。 对于那些喜欢直接显示文件差异的人来说,git中有一个脚本可以为每个查看的文件启动一个可视化的diff工具,而不是在名为difftool的命令行上显示它们:

 $ git difftool --staged 

这将和git diff --staged ,除了diff工具运行的时候(即每次文件被diff处理时),它都会启动默认的可视化diff工具(在我的环境中,这是kdiff3 ) 。

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

你总是可以在git命令中使用difftool代替diff

对于所有的视觉差异需求, git difftool可以代替任何git diff命令,包括所有的选项。

例如,要启动可视化比较工具而不询问是否为每个文件执行此操作,请添加-y选项(我认为通常您会需要这个!!):

 $ git difftool -y --staged 

在这种情况下,它将在视觉差异工具中逐个提取每个文件,一次一个,在工具closures后调出下一个文件。

或者查看Index特定文件的差异:

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

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

 $ git difftool --help 

设置Visual Git工具

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

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

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

git guigit-cola是可以让你查看和操作索引的graphics工具。 两者都包括简单的视觉差异的分阶段文件,并且git-cola也可以启动更复杂的并排视觉比较工具。

看到我的密切相关的答案在如何从git索引中删除文件? ,也是这个官方目录的Git – GUI客户端 。

想一下gitk工具也可以,用git提供,非常有用,可以看到变化