如何检查文件是否已在 Git 中暂存

GitGitBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何检查文件是否已在 Git 中暂存。我们将探索 git status 命令,以查看仓库的状态并识别已暂存的文件。然后,你将使用 git diff --cached 来验证当前暂存区中的具体更改,从而清晰了解下一次提交将包含哪些内容。最后,你将使用未暂存的文件进行测试,以进一步巩固你对暂存过程的理解。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/diff("Compare Changes") subgraph Lab Skills git/add -.-> lab-560031{{"如何检查文件是否已在 Git 中暂存"}} git/status -.-> lab-560031{{"如何检查文件是否已在 Git 中暂存"}} git/diff -.-> lab-560031{{"如何检查文件是否已在 Git 中暂存"}} end

检查暂存文件的 Git 状态

在这一步中,我们将在把文件添加到暂存区后检查 Git 仓库的状态。这将帮助你理解 Git 在提交更改之前是如何跟踪这些更改的。

首先,确保你位于 my-time-machine 目录中。你可以使用 cd 命令导航到该目录:

cd ~/project/my-time-machine

现在,让我们创建一个名为 future_plans.txt 的新文件,并向其中添加一些内容:

echo "Plan 1: Build a bigger time machine" > future_plans.txt

此命令创建文件并将文本 "Plan 1: Build a bigger time machine" 写入其中。

接下来,我们将使用 git add 命令将这个新文件添加到暂存区:

git add future_plans.txt

请记住,git add 会将更改暂存,为下一次提交做准备,但它本身并不会创建提交。

现在,让我们使用 git status 检查仓库的状态:

git status

你应该会看到类似于以下的输出:

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   future_plans.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        message.txt ## This file is already committed, but Git status shows it differently after a commit. Don't worry about this for now.

注意 "Changes to be committed:" 部分。这表明 future_plans.txt 现在已处于暂存区,准备包含在下一次提交中。Git 将其识别为 "new file"。

理解暂存区在 Git 中至关重要。它允许你在提交之前将相关的更改分组。这意味着你可以处理多个事项,但仅在特定更改准备好时才进行提交。

使用 git diff --cached 进行验证

在这一步中,你将学习如何查看当前暂存区中的更改。这时,git diff 命令就派上用场了,特别是搭配 --cached 选项使用。

确保你仍然位于 ~/project/my-time-machine 目录中。

我们之前已经将 future_plans.txt 添加到了暂存区。现在,让我们使用 git diff --cached 来确切查看哪些更改已被暂存:

git diff --cached

你应该会看到类似于以下的输出:

diff --git a/future_plans.txt b/future_plans.txt
new file mode 100644
index 0000000..a1b2c3d
--- /dev/null
+++ b/future_plans.txt
@@ -0,0 +1 @@
+Plan 1: Build a bigger time machine

让我们来详细分析一下这个输出:

  • diff --git a/future_plans.txt b/future_plans.txt:这一行表明 Git 正在展示 future_plans.txt 文件的两个版本之间的差异。
  • new file mode 100644:这表明 future_plans.txt 是一个新文件。
  • index 0000000..a1b2c3d:这些是文件内容的内部 Git 标识符。
  • --- /dev/null+++ b/future_plans.txt:这两行表明该文件是从无(/dev/null)与 future_plans.txt 的新版本进行比较。
  • @@ -0,0 +1 @@:这是一个“块头”(hunk header),表示发生更改的行。-0,0 表示原始(不存在)文件中的零行,而 +1 表示新文件中有一行。
  • +Plan 1: Build a bigger time machine:行首的 + 号表示这一行是新增的。

git diff --cached 命令会显示暂存区与上一次提交之间的差异。由于在这个仓库中我们还没有进行任何提交(除了上一个实验中的初始提交),它显示的是暂存区与空状态之间的差异。

这个命令在你提交更改之前查看暂存的更改时非常有用。它能帮助你确保只提交你想要提交的更改。

q 键退出差异视图并返回命令行。

测试未暂存文件

在这一步中,你将了解 Git 如何处理已对跟踪文件做出但尚未添加到暂存区的更改。这些更改被称为“未暂存”更改。

确保你位于 ~/project/my-time-machine 目录中。

我们之前创建并暂存了 future_plans.txt 文件。现在,让我们在不暂存更改的情况下,向该文件添加另一行内容:

echo "Plan 2: Invent a self-folding laundry machine" >> future_plans.txt

>> 操作符会将文本追加到现有文件中,而不是覆盖它。

现在,让我们再次检查仓库的状态:

git status

你应该会看到类似于以下的输出:

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   future_plans.txt

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:   future_plans.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        message.txt

注意新出现的部分:“Changes not staged for commit:”。这表明 Git 检测到 future_plans.txt 中的更改与暂存区中的版本不同。该文件被列为“已修改”。

这是 Git 中的一个关键概念:工作目录(你进行更改的地方)与暂存区是分开的。你可以在工作目录中有尚未暂存的更改。

要查看工作目录和暂存区之间的差异,你可以不使用任何选项直接使用 git diff 命令:

git diff

你应该会看到类似于以下的输出:

diff --git a/future_plans.txt b/future_plans.txt
index a1b2c3d..e4f5g6h 100644
--- a/future_plans.txt
+++ b/future_plans.txt
@@ -1 +1,2 @@
 Plan 1: Build a bigger time machine
+Plan 2: Invent a self-folding laundry machine

此输出显示了暂存区中 future_plans.txt 版本(仅包含“Plan 1”)与工作目录中版本(现在同时包含“Plan 1”和“Plan 2”)之间的差异。+ 号再次表示新增的行。

理解已暂存和未暂存更改之间的差异,以及如何使用 git statusgit diff 查看这些差异,是有效使用 Git 的基础。

q 键退出差异视图。

总结

在这个实验中,你学习了如何检查文件是否已在 Git 中暂存。首先,你创建了一个新文件,并使用 git add 命令将其添加到暂存区。然后,你使用 git status 命令观察到该文件被列在“Changes to be committed”之下,从而确认它已被暂存。

你还学习了使用 git diff --cached 命令查看当前暂存区中的具体更改,这能让你详细了解下一次提交将包含哪些内容。最后,你测试了 git status 命令在处理未暂存文件时的表现,从而区分已暂存和未暂存的更改。