趋近智
origin 和 upstreamGit diff 命令是检查仓库中不同状态之间差异的强大工具。默认情况下,不带任何额外参数运行 git diff 命令会比较您当前工作目录中的文件与暂存区(也称作索引)中的内容。虽然这种默认比较很有用,但有时您需要进行更具体的比较,尤其是在区分已暂存的修改和尚未暂存的修改时。理解这种区别有助于您编写精确的提交。
让我们来明确这些比较:
git add 之后(如果您尚未暂存任何内容,则为自上次提交以来)。git add 明确标记为要包含在下一次提交中的修改。它们位于暂存区,等待被永久记录。要查看您在工作目录中尚未暂存的修改,您只需运行:
git diff
这个命令会直接比较您工作目录中的文件与暂存区中的文件。如果您自上次提交以来没有暂存任何修改,这个命令实际上会显示您的工作目录与上次提交(HEAD)之间的差异。然而,一旦您使用 git add 暂存了一些修改,git diff 将只会显示在该暂存操作之后引入的差异。
考虑以下步骤:
您有一个文件 report.md,它已被Git跟踪并提交。
您编辑了 report.md,添加了一个新段落。
运行 git status 会显示 report.md 已修改但未暂存。
运行 git diff 会显示您刚刚在 report.md 中添加的行。
diff --git a/report.md b/report.md
index e69de29..abcdef0 100644
--- a/report.md
+++ b/report.md
@@ -0,0 +1,3 @@
+这是第一行。
+这是新添加的段落。
+这是最后一行。
(为清晰起见,输出已简化)
您暂存了文件:git add report.md。
现在,再次运行 git diff 会显示无输出,因为您的工作目录中 report.md 的版本现在与暂存区中的版本完全一致。
那么,您如何查看刚刚暂存的、准备进行下一次提交的修改呢?您需要将暂存区与上次提交(HEAD)进行比较。为此,Git 提供了 --staged 选项(或其旧的别名 --cached):
git diff --staged
or
git diff --cached
这两个命令执行相同的功能:它们显示暂存区中记录的快照与上次提交(HEAD)所代表的快照之间的差异。这对于在运行 git commit 之前的最终检查大有帮助。
让我们继续之前的例子:
您刚刚运行了 git add report.md。新段落现在已暂存。
运行 git status 会显示 report.md 为“待提交的修改”。
现在运行 git diff --staged 将会显示已暂存的 report.md(包含新段落)与上次提交中的版本(不含新段落)之间的差异。输出将与我们在暂存文件之前看到的 git diff 输出相似。
diff --git a/report.md b/report.md
index e69de29..abcdef0 100644
--- a/report.md
+++ b/report.md
@@ -0,0 +1,3 @@
+这是第一行。
+这是新添加的段落。
+这是最后一行。
(为清晰起见,输出已简化)
现在,想象您再次编辑 report.md,也许是修复了您刚添加的段落中的一个错别字,但您没有随后运行 git add。
运行 git diff(不带任何选项)将只显示最新的修改(错别字修正),因为那是您的工作目录与暂存区之间的差异。
运行 git diff --staged 将仍然显示段落的原始添加内容,因为那是暂存区中与上次提交相比的当前内容。
这种分离使您能够精确地控制和审查将要进入下一次提交的内容。
此图表展示了
git diff和git diff --staged所进行的比较。git diff比较工作目录与暂存区,显示未暂存的修改。git diff --staged比较暂存区与上次提交(HEAD),显示已暂存的、准备提交的修改。
总结:
git diff 查看您尚未暂存的修改。git diff --staged 查看您已暂存且即将提交的修改。掌握 git diff 的这两种用法,让您在提交之前对检查工作有更精细的控制,有助于您维护清晰易懂的项目历史。
这部分内容有帮助吗?
git diff 命令的官方文档,提供了比较工作目录、暂存区和提交等不同状态的完整参考。git diff 在检查更改方面的各种用法。© 2026 ApX Machine Learning用心打造