📖 知识点
1. Git 的三区(核心概念)
| 区域 | 位置 | 说明 | 生活比喻 |
|---|---|---|---|
| 工作区 | 你看到的文件夹 | 正在改的代码 | 桌面的草稿纸 |
| 暂存区 | .git 里 | git add 后,待提交 | 信封里待寄的文件 |
| 版本库 | .git 里 | git commit 后,正式存档 | 寄出的档案 |
代码的流转:改代码(工作区)→ git add(进暂存区)→ git commit(进版本库)。
2. git diff:看清工作区改了什么
还没 add 之前,用 git diff 看工作区和暂存区的差异(改了哪几行):
git diff
运行示例:
diff --git a/外卖App.py b/外卖App.py
index ...
--- a/外卖App.py
+++ b/外卖App.py
@@ -1 +1,2 @@
def 下单(): pass
+def 配送(): return '配送中'
+开头的是新增的行,-开头的是删除的行。一眼看清这次改了什么。
3. git diff --cached:看暂存区改了什么
add 之后、commit 之前,用 git diff --cached 看暂存区与版本库的差异:
git diff --cached
就是 "已经放进信封、但还没寄出" 的那些改动。
4. 三区 + diff 的配合
git status # 看状态:哪些文件改了/暂存了
git diff # 看工作区改了什么(未暂存)
git diff --cached # 看暂存区改了什么(待提交)
git commit -m "说明" # 提交暂存区的改动
先
git diff看清改动,确认没问题再提交,避免存错。
⚠️ 易错提醒
git diff(无参数)看未暂存的改动;git diff --cached看已暂存待提交的改动提交的是暂存区的内容,不是工作区 —— 忘了 add,改动不会被提交
diff 里
+新增、-删除,别读反
⚔️ 剧情 Kata 实战任务
任务需求:
修改 "外卖 App.py"(加一行新函数)
用
git diff看清工作区改了什么(新增的行)用
git add暂存后,用git diff --cached看暂存区改动用
git commit提交体会 "工作区→暂存区→版本库" 的流转
参考代码(在终端依次敲)
# 0. 进仓库
cd ~/外卖App
# 1. 改代码:加一个"配送"函数
echo "def 配送(): return '配送中'" >> 外卖App.py
# 2. 看工作区改了什么(+号是新行)
git diff
# 3. 暂存后,看暂存区改动
git add 外卖App.py
git diff --cached
# 4. 提交
git commit -m "feat: 增加配送功能"
# 5. 确认干净
git status
运行示例:
user@linux:~/外卖App$ echo "def 配送(): return '配送中'" >> 外卖App.py
user@linux:~/外卖App$ git diff
diff --git a/外卖App.py b/外卖App.py
--- a/外卖App.py
+++ b/外卖App.py
@@ ...
def 下单(): pass
+def 配送(): return '配送中'
user@linux:~/外卖App$ git add 外卖App.py
user@linux:~/外卖App$ git diff --cached
(显示同样的新增行,现在是暂存状态)
user@linux:~/外卖App$ git commit -m "feat: 增加配送功能"
[master b2c3d4e] feat: 增加配送功能
1 file changed, 1 insertion(+)
user@linux:~/外卖App$ git status
On branch master
nothing to commit, working tree clean
💡 完成动作示意:
加了 "配送" 函数 →
git diff看到+def 配送...这行新增
git add后git diff --cached看到已进暂存区
git commit -m "feat: 增加配送功能"→ 正式存档
git status显示 "working tree clean" → 改动全部入库,三区干净
🧠 思考题
git diff和git diff --cached分别看哪两个区域的差异?提交的是哪个区的内容?为什么提交前要先
git diff看一眼?直接提交可能遇到什么问题?