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

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

用它调用它
diffuse -m
Run Code Online (Sandbox Code Playgroud)
在你的Git工作副本中.
如果你问我,十年来我见过的最佳视觉效果.此外,它并不特定于Git:它与许多其他VCS互操作,包括SVN,Mercurial,Bazaar,......
另请参阅:在git diff中显示暂存和工作树?
Von*_*onC 49
注意,git status -v 还显示了分阶段的变化!(意思是你需要上演 - git add一些变化.没有上演的变化,没有差异git status -v.
自2006年2月Git 1.2.0以来就这样做了)
在其长格式(默认)中,git status有一个未记录的"详细"选项,它实际显示HEAD和索引之间的差异.
它即将变得更加完整:请参阅" 在git diff中显示分阶段和工作树? "(git 2.3.4 +,2015年第2季度):
git status -v -v
Run Code Online (Sandbox Code Playgroud)
小智 24
您可以使用此命令.
git diff --cached --name-only
Run Code Online (Sandbox Code Playgroud)
该--cached的选择git diff手段来获得上演文件和--name-only选项表示只得到文件名.
Lig*_*tCC 14
这里的最佳答案正确显示了如何查看缓存/暂存的更改Index:
$ git diff --cached
Run Code Online (Sandbox Code Playgroud)
或者$ git diff --staged是别名.
默认答案将在git bash(即命令行或控制台)中吐出diff变化.对于那些喜欢分阶段文件差异的可视化表示的人,git中有一个脚本可以为每个查看的文件启动一个可视化差异工具,而不是在命令行上显示它们,称为difftool:
$ git difftool --staged
Run Code Online (Sandbox Code Playgroud)
这将做同样的事情git diff --staged,除了运行diff工具的任何时候(即每次文件由diff处理),它将启动默认的视觉差异工具(在我的环境中,这是kdiff3).
工具启动后,git diff脚本将暂停,直到您的可视化差异工具关闭.因此,您需要关闭每个文件才能看到下一个文件.
difftool代替diff对于您的所有视觉差异需求,git difftool将取代任何git diff命令,包括所有选项.
例如,要启动可视化差异工具而不询问是否为每个文件执行此操作,请添加-y选项(我想通常你会想要这个!!):
$ git difftool -y --staged
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它将在视觉差异工具中拉出每个文件,一次一个,在工具关闭后调出下一个文件.
或者查看在以下位置暂存的特定文件的差异Index:
$ git difftool -y --staged <<relative path/filename>>
Run Code Online (Sandbox Code Playgroud)
有关所有选项,请参见手册页:
$ git difftool --help
Run Code Online (Sandbox Code Playgroud)
要使用默认值以外的可视git工具,请使用以下-t <tool>选项:
$ git difftool -t <tool> <<other args>>
Run Code Online (Sandbox Code Playgroud)
或者,请参阅difftool手册页,了解如何配置git以使用其他默认的可视化差异工具.
Goy*_*cky 12
对于Staging Area vs Repository比较使用
$git diff --staged
Run Code Online (Sandbox Code Playgroud)
对于Working vs Repository比较使用
$ git diff
Run Code Online (Sandbox Code Playgroud)
但如果文件被更改并添加到临时区域($ git add fileName),我们会尝试查看与($ git add fileName)的区别.它不会返回任何差异,因为文件位于暂存区域,并且不会与存储库进行比较.
要查看特定阶段文件(或多个文件)的差异,您可以使用
git diff --staged -- <path>...
Run Code Online (Sandbox Code Playgroud)
例如,
git diff --staged -- app/models/user.rb
Run Code Online (Sandbox Code Playgroud)
如果您的目的是推送目标远程repo分支并且您在提交更改日志中的第一次传递不完整,则可以在推送之前更正提交语句.
......做一些改变......
git diff # look at unstaged changes
git commit -am"partial description of changes"
Run Code Online (Sandbox Code Playgroud)
...回想一下未提及的更多变化......
...修改分阶段提交声明......
git commit --amend -m"i missed mentioning these changes ...."
git push
Run Code Online (Sandbox Code Playgroud)
小智 6
默认情况下,git diff用于显示未添加到git更新文件列表中的更改.但是如果你想显示添加或停滞的更改,那么你需要提供额外的选项,让git知道你对陷入停滞或添加的文件差异感兴趣.
$ git diff # Default Use
$ git diff --cached # Can be used to show difference after adding the files
$ git diff --staged # Same as 'git diff --cached' mostly used with latest version of git
Run Code Online (Sandbox Code Playgroud)
例
$ git diff
diff --git a/x/y/z.js b/x/y/z.js index 98fc22b..0359d84 100644
--- a/x/y/z.js
+++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) {
- if (a)
+ if (typeof a !== 'undefined')
res = 1;
else
res = 2;
$ git add x/y/z.js
$ git diff
$
Run Code Online (Sandbox Code Playgroud)
添加文件后,您不能使用'git diff'的默认值.您必须这样做: -
$ git diff --cached
diff --git a/x/y/z.js b/x/y/z.js index 98fc22b..0359d84 100644
--- a/x/y/z.js
+++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) {
- if (a)
+ if (typeof a !== 'undefined')
res = 1;
else
res = 2;
Run Code Online (Sandbox Code Playgroud)