如何显示已进行的更改?

我进行了一些更改以进行确认;如何查看下一次提交暂存的所有文件的差异?我知道git status ,但我想查看实际的差异 - 不仅是暂存文件的名称。

我看到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差异

git diff

显示工作目录和索引之间的更改。这显示了已更改但未上演提交的内容。

git diff - 缓存

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

git diff 头

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

另外

365Git上有更多详细信息。

如果您对可视并排视图感兴趣,可以使用 “ 漫反射视觉差异” 工具。如果已执行部分但不是全部更改,它甚至将显示三个窗格。在发生冲突的情况下,甚至会有四个窗格。

带有阶段性和非阶段性编辑的diffuse屏幕截图

调用

diffuse -m

在您的 Git 工作副本中。

如果您问我,十年来最好的视觉效果就与众不同。此外,它并非特定于 Git:它可与大量其他 VCS(包括 SVN,Mercurial,Bazaar,...)互操作。

另请参阅: 在 git diff 中显示暂存树和工作树?

注意git status -v 显示了阶段性的更改! (这意味着您需要暂存git add –一些更改。没有暂存更改,没有git status -v差异。
2006 年 2 月的 Git 1.2.0 开始

在其长格式(默认)下, git status具有未记录的 “详细” 选项,该选项实际上显示 HEAD 与索引之间的差异。

而且它将变得更加完整:请参阅 “ 在 git diff 中同时显示已运行和正在工作的树? ”(git 2.3.4 +,2015 年第二季度):

git status -v -v

您可以使用此命令。

git diff --cached --name-only

git diff--cached选项表示获取暂存文件, --name-only name --name-only选项表示仅获取文件名。

从 1.7 版本开始,应该是:

git diff --staged

使用视觉差异工具

默认答案(在命令行)

此处最重要的答案正确显示了如何查看Index的缓存 / 暂存更改:

$ 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 工具关闭。因此,您需要关闭每个文件才能看到下一个文件。


您可以始终在 git 命令中使用difftool代替diff

对于您所有的视觉差异需求, 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 配置为使用其他默认可视化 diff 工具。

对于暂存区与存储库(最后提交)的比较,请使用

$git diff --staged

该命令将您已暂存的( $ git add fileName )更改与上一次提交进行比较。如果要查看将要进行的下一次提交的阶段,可以使用 git diff --staged。此命令将您已分阶段的更改与上一次提交进行比较。

对于工作与登台比较,请使用

$ git diff

该命令将工作目录中的内容与暂存区中的内容进行比较。重要的是要注意,git diff 本身并不会显示自您上次提交以来所做的所有更改,仅显示尚未取消暂存的更改。如果您已暂存所有更改( $ git add fileName ),则 git diff 将不提供任何输出。

另外,如果$ git add fileName文件( $ git add fileName )然后进行编辑,则可以使用 git diff 查看暂存的文件中的更改和未暂存的更改。

如果您打算将目标推送到远程回购分支,并且您在提交更改日志中的第一遍操作不完整,则可以像这样在推送之前更正提交语句。

在本地

... 进行一些更改...

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

如果您有多个具有阶段性更改的文件,那么使用git add -i可能更实用,然后选择6: diff ,最后选择您感兴趣的文件。