行者孙Python

单机篇-Day6|改头换面:git diff 查看修改,工作区 / 暂存区 / 版本库三区

📖 知识点

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 看清改动,确认没问题再提交,避免存错。

⚠️ 易错提醒

  1. git diff(无参数)看未暂存的改动;git diff --cached 看已暂存待提交的改动

  2. 提交的是暂存区的内容,不是工作区 —— 忘了 add,改动不会被提交

  3. diff 里 + 新增、- 删除,别读反

⚔️ 剧情 Kata 实战任务

任务需求:

  1. 修改 "外卖 App.py"(加一行新函数)

  2. 用 git diff 看清工作区改了什么(新增的行)

  3. 用 git add 暂存后,用 git diff --cached 看暂存区改动

  4. 用 git commit 提交

  5. 体会 "工作区→暂存区→版本库" 的流转

参考代码(在终端依次敲)

# 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

 

💡 完成动作示意:

  1. 加了 "配送" 函数 → git diff 看到 +def 配送... 这行新增

  2. git add 后 git diff --cached 看到已进暂存区

  3. git commit -m "feat: 增加配送功能" → 正式存档

  4. git status 显示 "working tree clean" → 改动全部入库,三区干净

🧠 思考题

  1. git diff 和 git diff --cached 分别看哪两个区域的差异?提交的是哪个区的内容?

  2. 为什么提交前要先 git diff 看一眼?直接提交可能遇到什么问题?

‹ 返回目录
🏠首页 Python 📦资源 👤关于我