简介
在这个实验中,你将学习如何检查文件是否已在 Git 中暂存。我们将探索 git status
命令,以查看仓库的状态并识别已暂存的文件。然后,你将使用 git diff --cached
来验证当前暂存区中的具体更改,从而清晰了解下一次提交将包含哪些内容。最后,你将使用未暂存的文件进行测试,以进一步巩固你对暂存过程的理解。
在这个实验中,你将学习如何检查文件是否已在 Git 中暂存。我们将探索 git status
命令,以查看仓库的状态并识别已暂存的文件。然后,你将使用 git diff --cached
来验证当前暂存区中的具体更改,从而清晰了解下一次提交将包含哪些内容。最后,你将使用未暂存的文件进行测试,以进一步巩固你对暂存过程的理解。
在这一步中,我们将在把文件添加到暂存区后检查 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 status
和 git diff
查看这些差异,是有效使用 Git 的基础。
按 q
键退出差异视图。
在这个实验中,你学习了如何检查文件是否已在 Git 中暂存。首先,你创建了一个新文件,并使用 git add
命令将其添加到暂存区。然后,你使用 git status
命令观察到该文件被列在“Changes to be committed”之下,从而确认它已被暂存。
你还学习了使用 git diff --cached
命令查看当前暂存区中的具体更改,这能让你详细了解下一次提交将包含哪些内容。最后,你测试了 git status
命令在处理未暂存文件时的表现,从而区分已暂存和未暂存的更改。