如何比较工作区与暂存区的差异?

2026-04-15 09:24:00
Git基础入门
原创
10
摘要:你是不是也经常在终端里敲下 git add . 之后,突然忘记了自己到底添加了哪些修改?准备提交(commit)时,心里总有点不踏实,担心不小心把调试代码或者不相关的改动也包含了进去。

这种不确定感是每个开发者都会遇到的问题。

其实,想看清工作区和暂存区这两者之间的具体差异,你只需要一个核心命令:git diff。通过它和它的一个常用参数,就能精确地查看每一行代码的变动,让你在提交前做到心中有数。

git status:一个全局视角

在深入代码行级别的差异之前,我们通常会先用 git status 命令看一个全局。它能告诉你哪些文件发生了变化,以及它们目前处于什么状态。

比如,你修改了 main.js 文件,git status 会告诉你:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   main.js

这说明 main.js 在你的工作目录(Working Directory)里被修改了,但这些修改还没有被添加到暂存区(Staging Area)。

git status 解决了“哪些文件被改了”的问题,但它不回答“文件里到底改了什么”。要回答这个问题,就需要 git diff 登场了。

git diff:查看尚未暂存的修改

当你直接在终端里输入 git diff 时,Git 会为你比较 工作目录暂存区之间的差异。

简单来说,它显示的是“你已经做了,但还没 add 的修改”。

假设 main.js 原本只有一行代码:

// version 1

你把它改成了:

// version 2
console.log('hello');

此时运行 git diff,你会看到类似下面的输出:

--- a/main.js
+++ b/main.js
@@ -1 +1,2 @@
-// version 1
+// version 2
+console.log('hello');

这里的 - 号代表“从暂存区的版本中移除这一行”,而 + 号则代表“在工作目录的版本中添加了这一行”。通过这个输出,你可以清晰地看到所有还未暂存的修改。

git diff --staged:查看已暂存的修改

现在,我们把刚才的修改添加到暂存区:

git add main.js

完成之后,如果再次运行 git diff,你会发现它什么也不显示了。这是因为你的工作目录和暂存区现在的内容已经完全一样了。

那么,如何查看我们刚刚添加到暂存区、准备提交的那些内容呢?

答案是使用 git diff --staged (或者它的另一个别名 git diff --cached)。这个命令比较的是 暂存区和**上一次提交(HEAD)**之间的差异。

它显示的是“你已经 add 了,准备 commit 的修改”。

运行 git diff --staged,你会看到和上一步完全相同的输出,因为它展示的正是你刚刚暂存的那些改动。在执行 git commit 之前,运行这个命令来做最后一次检查,是一个非常专业的习惯。

场景演练:当两个区域都存在修改

为了彻底搞懂,我们来看一个更常见的复杂场景。

接上一步,main.js 的修改已经被暂存。现在,你又在工作目录里对它做了第二次修改,比如为其增加了一行注释:

// version 2
// This is a test
console.log('hello');

此时,main.js 这个文件同时存在“已暂存的修改”和“未暂存的修改”。运行 git status 也会明确提示这一点。

在这种情况下:

  • 运行 git diff,它只会显示第二次的修改,也就是那行新增的注释。因为它只关心工作目录与暂存区的差异。
  • 运行 git diff --staged,它则会显示第一次的修改(版本 1 到版本 2 的变化)。因为它只关心暂存区与上次提交的差异。

通过这两个命令的组合,无论你的修改有多复杂,都能被清晰地划分和审阅。

总结:养成清晰的提交习惯

现在,我们可以建立一个清晰、可靠的版本控制流程,避免混乱。

  1. 编码修改:在你的工作目录中修改文件。
  2. 查看状态:运行 git status,了解哪些文件被改动了。
  3. 审查修改:运行 git diff,查看所有尚未暂存的修改,确保没有多余的调试代码。
  4. 添加暂存:使用 git add <file> 将确认无误的修改添加到暂存区。我们建议精确地添加文件,而不是总用 git add .。
  5. 审查暂存:运行 git diff --staged,对即将提交的内容做最后一次审查。这步至关重要。
  6. 提交:运行 git commit,并撰写一条清晰的提交信息。

养成这个习惯,能极大地提升代码质量和协作效率,让你的每一次提交都精准且自信。

发表评论
评论通过审核后显示。