我如何显示已经上演的变化?
我提出了一些改变, 我怎么能看到下一个提交的所有文件的差异? 我知道git的状态 ,但我想看看实际的差异 – 不仅仅是上演的文件的名字。
我看到了git-diff(1)手册页说
git diff [–options] [ – ] […]
这种forms是查看你所做的相对于索引的变化(下一次提交的登台区域)。 换句话说,差异是你可以告诉git进一步添加到索引,但你还没有。 你可以通过使用git-add(1)来完成这些更改。
不幸的是,我不太明白这一点。 必须有一些方便的一行,我可以创build一个别名,对吗?
它应该是:
git diff --cached
--cached
caching意味着显示caching/索引(即分阶段更改)对当前HEAD
更改。 --staged
是--cached
的同义词。
编辑
为了澄清上述说明,– --staged
和--cached
并不指向HEAD
,只是与HEAD
有所不同。 如果你select使用git add --patch
(或git add -p
)来提交什么,– --staged
将返回上演的内容。
一个简单的graphics使这个更清晰:
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 gui
和git-cola
是可以让你查看和操作索引的graphics工具。 两者都包括简单的视觉差异的分阶段文件,并且git-cola
也可以启动更复杂的并排视觉比较工具。
看到我的密切相关的答案在如何从git索引中删除文件? ,也是这个官方目录的Git – GUI客户端 。
想一下gitk
工具也可以,用git提供,非常有用,可以看到变化