iT邦幫忙

2026 iThome 鐵人賽

DAY 23
0
Claude AI

從零開始 Claude Code:30 天打造 AI 任務管理 Web App系列 第 23 篇

[Day 23] Git + Claude Code:開始用版本控制保護每次修改

  • 分享至 

  • xImage
  •  

做到 Day 22 之後,我已經開始有一套比較固定的 Claude Code 工作流程:

先讀 CLAUDE.md
先規劃
控制修改範圍
修改後自己驗證

但如果之後 Claude Code 一次改很多檔案,還是會遇到另一個問題:

它到底改了什麼?如果改錯了,我要怎麼追?

所以 Day 23 不新增 Web App 功能。
今天要做的是:
把 Git 正式加入 Claude Code 的開發流程裡。


先確認專案是不是 Git Repository

我一開始在專案資料夾輸入:

git status

結果出現:

fatal: not a git repository
(or any of the parent directories): .git

這代表目前的 ai-task-manager 還沒有初始化 Git。
所以我直接在專案根目錄執行:

git init

完成後再輸入:

git status

就看到:

On branch main
No commits yet

代表這個專案已經正式成為 Git Repository。


第一次 git status 看到了什麼?

初始化後,Git 把目前所有尚未追蹤的專案檔案列出來。
例如:

.env.example
.gitignore
CLAUDE.md
app.py
config.py
db.py
models/
requirements.txt
schema.sql
static/
templates/

這些都是 Untracked files。
也就是:

檔案已經存在,但 Git 還沒有正式開始追蹤。

第一次看到這個畫面時,我沒有急著直接 git add .,而是先檢查有沒有不應該進 Git 的檔案。


先檢查 .gitignore

目前 .gitignore 的內容是:

venv/
.env
__pycache__/
*.pyc
*.log

這些設定主要是在排除:

venv/
→ Python 虛擬環境

.env
→ 真正的環境變數與密碼

__pycache__/、*.pyc
→ Python 執行產生的暫存檔

*.log
→ 測試或執行紀錄

其中最需要注意的是 .env。
因為裡面可能放:

MySQL 帳號
MySQL 密碼
之後的 API Key

這些內容都不應該被 commit。


scenario_test.log 也不需要進 Git

第一次執行 git status 時,我還看到:

scenario_test.log

這是前面測試留下來的 log 檔,不是專案真正需要的原始碼。
所以 .gitignore 裡的:

*.log

就是用來把這類檔案排除。
加入規則後重新確認,scenario_test.log 就不會再出現在待追蹤清單裡。


.env.example 可以保留

真正的:

.env

不能進 Git。
但:

.env.example

可以被追蹤。
它只保留需要哪些環境變數,例如:

MYSQL_HOST=
MYSQL_PORT=
MYSQL_DATABASE=
MYSQL_USER=
MYSQL_PASSWORD=

不放真正密碼。
這樣之後如果換電腦,還是可以知道 .env 需要準備哪些設定。


建立第一個 Git Commit

確認 .gitignore 沒問題後,我把目前整個專案加入 Git,並手動建立第一個 commit:

建立 AI Task Manager 初始版本

這次 commit 並不是代表 Day 23 新增了什麼功能。
它比較像是一個:

專案目前狀態的基準點。

因為這個 Web App 在 Day 1~22 已經做了不少功能,所以我現在才開始使用 Git,就先把目前正常的狀態記錄下來。
目前可以理解成:

Day 1~22 專案內容
	↓
git init
	↓
建立初始 commit
	↓
之後的新修改開始可以被追蹤

再讓 Claude Code 檢查 Git

建立初始 commit 後,我再讓 Claude Code 幫我檢查 Git 狀態。
這次我刻意限制它只能分析,不可以修改任何東西。
Prompt:

Day 23 要開始把 Git 和 Claude Code 一起使用。

今天不修改 Web App 功能。

請先檢查目前專案的 Git 狀態與 .gitignore,
不要修改任何檔案,也不要執行 git add 或 git commit。

請告訴我:

1. 目前是不是 Git Repository
2. 目前在哪個 branch
3. 工作區有哪些 modified / untracked 檔案
4. .gitignore 是否有忽略:
   - .env
   - venv/
   - __pycache__/
   - *.pyc
5. 有沒有看起來不應該 commit 的檔案
6. 目前是否適合建立一個 Day 22 完成後的 commit
7. 如果適合,建議這次 commit 應該包含哪些檔案

今天先分析,
不要執行 git add、git commit,
也不要修改任何檔案。

Claude Code 的檢查結果

Claude Code 回覆它只執行了唯讀的 Git 指令,沒有修改檔案,也沒有執行 git add 或 git commit。
它確認目前:

是 Git Repository
branch = main

而且目前只有一個 commit:

66d6cba  建立 AI Task Manager 初始版本

另外也確認:

nothing to commit, working tree clean

也就是目前:

沒有 modified
沒有 untracked
工作區和 HEAD 完全一致

這個狀態對後面使用 Claude Code 很重要。
因為只要之後有新修改,就能清楚看出那一次到底改了哪些東西。


Claude 也驗證了 .gitignore

Claude Code 不只是讀 .gitignore,還實際確認忽略規則有沒有生效。
結果:

項目 結果
.env 已忽略
venv/ 已忽略
__pycache__/ 已忽略
*.pyc 已忽略
*.log 已忽略

scenario_test.log 也因為 *.log 規則被排除。


沒有敏感檔案被 Git 追蹤

Claude Code 也檢查了目前 Git 已追蹤的檔案。
沒有看到:

.env
venv/
__pycache__/
*.pyc
scenario_test.log

這些不該進 Git 的內容。
.env.example 則正常被追蹤。
Claude 還確認:

.env.example 裡的 DB_PASSWORD
只是佔位資料
不是 .env 裡真正的密碼

而且沒有把真正的密碼輸出出來。
這一點也讓我比較放心。


為什麼不用再做一個 Day 22 commit?

我的 Prompt 裡原本有問:

目前是否適合建立一個 Day 22 完成後的 commit?

Claude Code 的答案是:

不需要

因為目前:

nothing to commit, working tree clean

而且唯一的初始 commit 已經包含 Day 22 更新後的 CLAUDE.md。
所以現在再 commit,也沒有任何新的內容可以記錄。
這次的初始 commit 就已經是目前的基準點。


Git + Claude Code 之後怎麼配合?

Day 23 之後,我想把流程固定成:

  修改前
	↓
git status
	↓
確認 working tree clean
	↓
讓 Claude Code 規劃 / 修改
	↓
git status
	↓
git diff
	↓
自己測試
	↓
確認沒問題
	↓
git add
	↓
git commit

這裡不用把 Git 想得太複雜。
目前先記住兩個最常用的檢查方式就夠了:

git status
→ 看哪些檔案有變

git diff
→ 看實際改了哪些內容

這樣 Claude Code 說:

我只修改了 app.py

我就可以自己用 Git 再確認一次。
不需要完全依賴它的文字描述。


為什麼 working tree clean 很重要?

如果上一輪修改還沒有 commit,又接著讓 Claude Code 改新的東西,之後看 git diff 時就很容易混在一起。
所以我希望之後每完成一個小階段,就先把它整理成一個 commit。
下一次開始時保持:

nothing to commit, working tree clean

這樣比較容易知道目前看到的修改到底是哪一次產生的。


目前沒有設定 Remote

Claude Code 還確認:

git remote -v

目前沒有輸出。
也就是:

現在只有本機 Git
還沒有連到 GitHub

這正好符合今天的範圍。
Day 23 先把本機版本控制建立起來,不處理:

GitHub
Push
Pull
Pull Request
CI/CD

這些可以等之後真的需要再加。


Git 作者資訊

Claude Code 另外提醒,目前初始 commit 的作者是 Git 本機設定裡的:

user.name
user.email

如果想確認,可以輸入:

git config user.name
git config user.email

這只是 Git commit 的作者資訊,和 Claude Code 帳號不是同一件事。
如果目前顯示的就是我想使用的 Git 身分,就不需要修改。


Claude Code 可以幫我看 Git,但不代表全部交給它

Day 23 我刻意要求 Claude:

不要執行 git add
不要執行 git commit

因為我現在還在熟悉 Git。
目前我比較想維持:

Claude Code
→ 幫我分析 Git 狀態與修改內容

我自己
→ 決定要不要 add / commit

這樣可以先理解每一步發生了什麼,而不是從一開始就全部自動化。


Day 23 實際確認結果

這次可以整理成:

Git Repository               ✓
branch = main                ✓
初始 commit 已建立           ✓
working tree clean           ✓
.env 已忽略                  ✓
venv/ 已忽略                 ✓
__pycache__/ 已忽略          ✓
*.pyc 已忽略                 ✓
*.log 已忽略                 ✓
沒有敏感檔案被追蹤           ✓
目前沒有設定 remote          ✓
Claude 沒有自行 add / commit ✓

Day 23 最大的改變

以前我的流程比較像:

Claude Code 修改
	 ↓
我自己測試
	 ↓
繼續下一個功能

現在則多了一層 Git:

修改前確認乾淨
	 ↓
Claude Code 修改
	 ↓
Git 看實際差異
	 ↓
  自己測試
	 ↓
建立 commit
	 ↓
再進下一步

Claude Code 負責:

分析
規劃
修改

Git 則負責:

記錄
比較
追蹤

兩個工具做的事情不一樣,但放在一起之後,我對每次修改會更有掌握。


Day 23 做完後

今天沒有新增任何 Web App 功能。
真正完成的是:

把現有專案初始化成 Git Repository
建立第一個基準 commit
確認 .gitignore 正常
確認敏感資料沒有被追蹤
讓 Claude Code 協助檢查 Git 狀態
建立之後的 Git + Claude Code 工作流程

現在開始,每次 Claude Code 修改專案,都可以先用 Git 看實際差異,再決定要不要留下這次修改。
這也剛好接到下一天。
既然 Git 已經能清楚顯示修改內容,下一步就可以把這些差異拿給 Claude Code 檢查:

不要幫我寫新功能,先幫我看看這次修改有沒有問題。


上一篇
[Day 22] CLAUDE.md 不是寫完就好:實際測試它有沒有真的生效
下一篇
[Day 24] 讓 Claude Code 幫我做 Code Review:從 git diff 開始檢查修改
系列文
從零開始 Claude Code:30 天打造 AI 任務管理 Web App 共 24 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言