How do I show the changes which have been staged?
我准备了一些要提交的更改;如何查看为下一次提交准备的所有文件的差异?我知道Git的状态,但我想看看实际的差异——不仅仅是文件名的分级。
我看到Git Diff(1)手册页上说
git diff [--options] [--] […]
This form is to view the changes you made relative to the index (staging area for the next commit). In other words, the differences are what you could tell git to further add to the index but you still haven't. You can stage these changes by using git-add(1).
号
不幸的是,我不能完全理解这一点。一定有一些方便的一行程序,我可以为它创建别名,对吗?
应该是:
1 | git diff --cached |
简单的图形使这一点更加清晰:
。
差异比较
显示工作目录和索引之间的更改。这将显示已更改的内容,但不是为提交而准备的。
git diff--缓存
显示索引和头(这是该分支上的最后一次提交)之间的更改。这将显示为提交而添加到索引和分段的内容。
Git压头
显示工作目录和头之间的所有更改(包括索引中的更改)。这将显示自上一次提交以来的所有更改,无论它们是否已为提交而准备。
也:
关于365Git有更多的细节。
如果您对一个可视的并排视图感兴趣,那么漫反射视觉差异工具可以做到这一点。如果进行了一些但不是所有的更改,它甚至会显示三个窗格。在发生冲突的情况下,甚至会有四个窗格。
氧化镁
用调用它
1 | diffuse -m |
号
在你的Git工作副本中。
如果你问我,十年来我看到的最好的视觉效果是不同的。此外,它并不是特定于Git的:它与大量其他VCS(包括SVN、Mercurial、Bazaar等)进行互操作。
另请参见:在Git Diff中显示阶段树和工作树?
注意,
在它的长格式(默认)中,
它将变得更加完整:请参见"在Git Diff中显示阶段树和工作树?"(Git 2.3.4+,2015年第二季度):
1 | git status -v -v |
您可以使用此命令。
1 | git diff --cached --name-only |
。
从1.7版及更高版本开始,应该是:
1 | git diff --staged |
。
使用视觉差异工具默认答案(在命令行)
这里的顶部答案正确地显示了如何查看
1 | $ git diff --cached |
或者是一个别名。
而是启动Visual Diff工具默认答案将在git bash(即在命令行或控制台中)上显示diff更改。对于那些喜欢阶段性文件差异的可视化表示的人,Git中有一个脚本,它为每个查看的文件启动一个可视化差异工具,而不是在命令行上显示这些文件,称为
1 | $ git difftool --staged |
号
这将与
工具启动后,Git Diff脚本将暂停,直到关闭Visual Diff工具。因此,您需要关闭每个文件才能看到下一个文件。
在git命令中,可以使用对于所有的视觉差异需求,
例如,要在不询问是否对每个文件执行该操作的情况下启动VisualDiff工具,请添加
1 | $ git difftool -y --staged |
在这种情况下,它将在VisualDiff工具中一次提取一个文件,并在工具关闭后提取下一个文件。
或者查看
1 | $ git difftool -y --staged <<relative path/filename>> |
。
有关所有选项,请参见手册页:
1 | $ git difftool --help |
设置Visual Git工具
要使用默认以外的Visual Git工具,请使用
1 | $ git difftool -t <tool> <<other args>> |
。
或者,请参阅diff tool手册页,了解如何配置git以使用不同的默认可视diff工具。
用于临时区域与存储库比较
1 | $git diff --staged |
用于工作与存储库比较
1 | $ git diff |
。
但如果一个文件被更改并添加到临时区域(
如果您的意图是推送目标远程回购分支,并且您在提交更改日志中的第一次传递不完整,那么您可以在这样推送之前更正提交语句。
本地…进行一些更改…
1 2 3 | git diff # look at unstaged changes git commit -am"partial description of changes" |
。
…回忆在提交中未提及的更多更改…
Git Diff源站/主服务器查看阶段性但不是推送的更改…修改阶段提交语句…
1 2 3 | git commit --amend -m"i missed mentioning these changes ...." git push |
如果您有多个具有阶段性更改的文件,使用
默认情况下,git diff用于显示未添加到git更新文件列表中的更改。但是,如果您想显示添加或添加的更改,那么您需要提供额外的选项,让Git知道您对添加或添加的文件diff感兴趣。
1 2 3 | $ 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 |
。
例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ 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 $ |
添加文件后,不能使用默认的"git diff"。必须这样做:
1 2 3 4 5 6 7 8 9 10 | $ 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; |
。
在Git中如何从索引中删除一个文件,可以看到我的密切相关的答案吗?以及git-gui客户机的官方目录。
想想