简介
在之前的实验中,你学习了如何初始化一个「时间机器」(Git 仓库),并保存第一个快照。但项目并不是静态不变的——它会持续演进。你会修复错误、添加功能并更新文档。
Git 擅长跟踪这些变化。它可以帮助你:
- 检查变更:在保存之前,准确查看你修改了哪些行。
- 查看历史:回顾曾经保存的每个快照,了解谁在什么时候做了什么。
这就是版本控制的真正价值:它不仅用于备份,还能以结构化的方式保存项目随时间变化的历史。
在本实验中,你将修改一个文件,使用 git diff 检查精确差异,保存新的快照,然后使用 git log 浏览项目历史。这是实际 Git 工作流中经常使用的基本检查循环。
修改项目文件
我们从一个已经包含一次提交(「Initial commit」)的仓库开始。现在模拟在这个项目上进行一些工作。
进入项目目录:
cd /home/labex/project
查看 readme.txt 的当前内容:
cat readme.txt
你应该看到:Hello World
通过追加新行来修改文件。我们将添加一段简单的说明:
echo "Git is a version control system" >> readme.txt
确认文件已经发生变化:
cat readme.txt
输出:
Hello World
Git is a version control system
Git 已经发现 readme.txt 与上一个快照中保存的版本不同。现在,该文件被视为 Modified。
使用 Git Diff 检查变更
在保存工作之前,最好准确检查你修改的内容。这就像提交文章之前先校对一样。
Git 提供了 diff 命令来完成这项工作。它会比较工作目录中的文件与上一次提交(快照)中的文件。
因此,git diff 比较的是两个状态:历史中已保存的内容,以及当前工作树中存在的内容。它是永久记录变更之前检查工作的主要工具之一。
运行 git diff 查看变更:
git diff
分析输出:
diff --git a/readme.txt b/readme.txt
index ...
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
Hello World
+Git is a version control system
--- a/readme.txt:原始版本(旧版本)。+++ b/readme.txt:当前版本(新版本)。+Git is...:加号(+)表示新增了一行。(减号-表示删除了一行。)
阅读 diff 输出是 Git 的核心技能,因为它可以显示逐行变更。之后的许多工作流,例如代码审查、应用补丁和拉取请求,都建立在相同的理念之上。
这一步可以确认你的变更正是你想要的内容。
使用 Git Commit 保存变更
确认变更无误后,现在保存一个新的快照。记住这两个步骤:暂存(Stage),也就是把文件放到装货区;以及提交(Commit),也就是创建快照。
先检查状态:
git status
你会在「Changes not staged for commit」下方看到红色的 readme.txt。
暂存该文件:
git add readme.txt
再次检查状态:
git status
现在,readme.txt 会显示为绿色,并位于「Changes to be committed」下方。
这再次体现了 Git 对「已修改内容」和「已暂存内容」的区分。文件中可以存在变更,但在暂存之前,这些变更不会成为下一次提交的候选内容。
使用清晰的消息提交快照:
git commit -m "Add description about Git"
-m:允许你直接输入提交消息。- 提交消息应说明你修改了什么。
现在,你已经保存了项目历史的第二个版本!
查看项目历史
现在,你的仓库中有两次提交。要查看项目的时间线,请使用 git log 命令。这就是你的「历史记录簿」。
查看完整日志:
git log
检查输出:
commit 8d3a1b2... (SHA Hash)
Author: Your Name <you@example.com>
Date: Mon Oct 10 10:00:00 2023 +0000
Add description about Git
commit 4f2b3c4... (SHA Hash)
Author: Your Name <you@example.com>
Date: Mon Oct 10 09:00:00 2023 +0000
Initial commit
- SHA Hash:较长的 ID 字符串(例如
8d3a...)。它是特定快照的唯一指纹。 - HEAD:(如果显示)指向你当前位置的指针。
- 顺序:最新的提交始终位于顶部。
这些哈希值是 Git 识别历史的核心。Git 不使用连续数字为提交命名,而是使用基于内容的标识符,让每个快照都有唯一的引用。
(如果需要,按 q 退出日志查看界面。)
查看精简历史
随着项目持续开发数月,完整的 git log 可能会变得过长且包含过多细节。有时,你只需要一个快速的摘要列表。
Git 提供了 --oneline 标志来完成这项工作。
运行精简日志命令:
git log --oneline
检查输出:
8d3a1b2 Add description about Git
4f2b3c4 Initial commit
这种视图只显示每次提交的短哈希和提交消息,每行一条。它非常适合快速浏览最近发生了什么。
挑战:
再次修改 readme.txt(添加另一行),提交这次变更,然后再次检查 git log --oneline。你应该会看到三条记录!
总结
在本实验中,你学习了如何管理项目变更的完整生命周期:
- 修改:修改文件内容。
- 检查:使用
git diff验证这些变更。 - 提交:使用
git add和git commit保存永久快照。 - 查看:使用
git log和git log --oneline浏览时间线。
这四个命令是日常使用 Git 的核心。掌握它们,就掌握了版本控制的基础。



