Python

Git 與 Vibe Coding 工作流:按 Enter 之前,你要知道它在做什麼

Git 是 Vibe Coding 的時光機與安全網:commit 建立可回復的存檔點,push / pull 同步遠端,reset --hard 能救回被 AI 改壞的程式。判斷 IDE 提示安不安全,關鍵在於這個操作是唯讀、可取消,還是不可復原。
Git 與 Vibe Coding 工作流:按 Enter 之前,你要知道它在做什麼

Git 與 Vibe Coding 工作流:按 Enter 之前,你要知道它在做什麼

IDE 突然彈出「偵測到未合併的變更」「要強制推送嗎」,是不是常常愣住不知道能不能按 Enter?Git 是 Vibe Coding 的時光機:程式被 AI 改壞了,一鍵回到昨天的版本;沒有它,你只能自己想辦法收拾殘局。這一課把五個核心概念、六個日常指令、IDE 提示的判讀方式,一次講清楚。

你將學到什麼

五個核心概念

倉庫、提交、分支、遠端、合併,用比喻一次記住。

六個日常指令

status、add、commit、push、pull、log,每個都附風險等級。

IDE 提示怎麼判斷

看到彈出視窗,分辨可以直接按還是要先停下來問。

PR 到 Merge 全流程

分支、Smoke Test、Code Review 到合併主線的標準順序。

.gitignore 安全清單

Python 專案該擋掉哪些檔案,避免 API Key 外洩。

三道實戰題

讀懂 git log、改寫壞掉的 commit 訊息、抓出五個危險操作。

五個核心概念:先懂這些再說指令

概念白話說明比喻
Repository(倉庫)一個專案的完整歷史記錄,包含所有版本整本存檔日誌
Commit(提交)把目前的變更永久記錄下來,附上說明按下「存檔」並寫備注
Branch(分支)平行開發的獨立時間線,不影響主線存檔時開新檔案
Remote(遠端)放在 GitHub 上的備份版本雲端同步
Merge(合併)把兩條分支的變更合在一起把兩份草稿合成一份

三個工作區:你的檔案在哪一層?

git 三層模型Working Directory(工作目錄):你正在編輯的實際檔案。
git add
Staging Area(暫存區):準備好要 commit 的變更。
git commit
Repository(倉庫):永久記錄的歷史版本。
工作目錄Working Directorygit add暫存區Staging Areagit commit本機儲存庫Local Repositorygit push遠端GitHub檔案要走過三層,才會真的送上 GitHub每一步都是一個明確的指令,不是按 Enter 就一步到位
檔案要走過三層,才會真的送上 GitHub:工作目錄到暫存區到本機儲存庫到遠端。

六個日常指令:按 Enter 之前先看說明

git status,現在的狀態。

git status
# 按 Enter 之後:顯示哪些檔案有變更、哪些在暫存區
# 風險等級:零風險,只讀不改,隨時可以跑

git add,把檔案加入暫存區。

git add app.py          # 加入單一檔案
git add .               # 加入所有變更(常用但要注意不要加到 .env)
# 按 Enter 之後:檔案進入暫存區,還沒有 commit
# 風險等級:低,可以 git reset HEAD 取消

git commit,永久記錄。

git commit -m "feat: 新增用戶登入功能"
# 按 Enter 之後:在本地建立一筆永久記錄
# 還沒有推到 GitHub,只在自己電腦
# 風險等級:低,本地操作,可以 git reset 撤銷

git push,推到 GitHub。

git push origin main
# 按 Enter 之後:把本地的 commit 上傳到 GitHub
# 風險等級:中,推上去了別人就看得到
# 如果被拒絕(rejected),先 git pull 再重試,不要加 --force
git push --force 是危險操作強制推送會覆蓋遠端歷史,讓其他人的工作消失。IDE 建議你 force push 時,先問清楚原因。獨自開發的個人分支才考慮使用。

git pull,從 GitHub 拉更新。

git pull origin main
# 按 Enter 之後:把 GitHub 上最新的變更下載並合併到本地
# 風險等級:中,如果本地有未 commit 的變更可能產生衝突
# 最佳實踐:pull 前先 git status 確認本地是乾淨的

git log,查看歷史記錄。

git log --oneline -10   # 顯示最近 10 筆,每筆一行
# 按 Enter 之後:顯示 commit 歷史,只讀,零風險
# 看到想回去的版本,記下 commit hash(前 7 碼)
# 按 q 離開

Vibe Coding 的安全操作順序

讓 AI 大改之前,永遠先 commit先存一個安全點,出問題就能退回去。
git status             # 確認現在狀態
git add .              # 加入所有變更
git commit -m "WIP: 讓 AI 修改前的存檔"  # 存一個安全點
# ← 這裡讓 AI 大幅修改程式
# 如果改壞了:
git reset --hard HEAD  # 回到上一個 commit(危險但有用)
git reset --hard 會丟失所有未 commit 的變更這個指令無法復原。執行前確認你真的不需要現在的變更。

IDE 彈出提示:可以按還是先等一下?

IDE 說的話意思安全?
「要初始化 Git 倉庫嗎?」在這個資料夾建立 .git 目錄可以
「有 1 個檔案要 stage」git add 一個檔案可以
「要提交 3 個變更嗎?」git commit,先確認訊息確認後可以
「遠端有新的變更,要拉取嗎?」git pull,先確認本地是乾淨的先 status
「偵測到合併衝突」兩份變更有衝突,需要手動解決不要亂按
「要強制推送嗎?」git push --force,會覆蓋遠端先問清楚
「要 rebase 嗎?」重寫 commit 歷史,進階操作先查清楚
「要 stash 變更嗎?」暫存到草稿,不 commit可以(記得取回)
Vibe Coder 的黃金原則看到不確定的提示,先複製 IDE 的提示文字,貼給 AI 問:「這個提示在說什麼,我應該按確認嗎?」比亂按安全一百倍。

PR、Smoke Test、Merge:協作流程全解

PR(Pull Request)是「我改好了,請幫我看一下再合併」的正式流程。即使是個人專案,養成 PR 習慣也讓你有機會回頭確認 AI 的改動

1. git checkout -b feature/login   # 建立新分支(不在 main 上直接改)
2. # AI 幫你修改程式
3. git add . && git commit -m "feat: 新增登入功能"
4. git push origin feature/login   # 推送分支到 GitHub
5. GitHub 上建立 PR(Pull Request)
6. Smoke Test:跑一遍最基本的功能確認程式能動
7. Code Review:自己或同事看 AI 的改動
8. Merge PR 到 main                 # 合併到主線
9. git checkout main && git pull   # 本地同步最新

Smoke Test 是什麼?

Smoke Test 定義合併前最基本的功能驗證,不是完整測試,而是「程式能不能啟動、最重要的功能有沒有壞掉」。名稱來自硬體測試:插電後看有沒有冒煙。Vibe Coder 的 smoke test 至少要:① 程式啟動不報錯;② 核心功能走一遍;③ 沒有明顯的例外或崩潰。

.gitignore:不能上傳的東西

.gitignore 告訴 git 哪些檔案不要追蹤。這是安全的第一道防線,漏掉了,API Key 就上了 GitHub

# 環境變數(絕對不能上傳)
.env
.env.local
.env.*.local

# Python 快取與編譯檔
__pycache__/
*.py[cod]
*.pyo

# 虛擬環境
venv/
.venv/
env/

# 資料庫檔案(本地測試用)
*.db
*.sqlite3

# IDE 設定
.vscode/
.idea/
.cursor/

# 輸出和日誌
*.log
output/
__output__/
上傳了 .env 怎麼辦?① 立刻撤銷 API Key(去 OpenAI / Anthropic 後台重新生成);② git rm --cached .env 把它從追蹤中移除;③ 加進 .gitignore;④ 即使你之後刪掉,git 歷史裡還有記錄,所以 Key 必須換掉。

三道遞進題:讀懂、改寫、抓錯

讀懂:看 git log,說出發生了什麼;改寫:把壞的 commit 訊息改好;抓錯:找出不安全的 git 操作。

題目一:讀懂(基礎)

說明以下 git log 發生了什麼事:

a3f9c12 fix: 修正登入 bug
b7e2d01 feat: 新增登入功能
c5a1f88 WIP: 讓 AI 修改前的存檔
d0e4b32 feat: 建立用戶資料庫
e9c7a51 init: 初始化專案

任務:說明這個專案的開發歷程(從最舊到最新),c5a1f88 這筆 commit 的目的是什麼,以及如果登入 bug 還沒修好,應該用哪個指令回到 c5a1f88

答案拆解① 由舊到新:初始化 → 建資料庫 → 讓 AI 改之前存檔 → AI 新增登入功能 → 修正登入 bug,總共五筆 commit。
c5a1f88 WIP 是「讓 AI 大改之前的安全存檔點」,出問題可以回到這裡,這是 Vibe Coding 的安全習慣。
③ 回到指定 commit:git checkout c5a1f88(查看)或 git reset --hard c5a1f88(丟棄之後的所有變更,危險操作)。

題目二:改寫(進階)

為什麼 commit 訊息很重要?好的 commit 訊息是給三個月後的自己看的,那時你已經忘了這段程式在做什麼。AI 生成的 commit 訊息通常太短或太籠統。學會要求 AI 寫出好的 commit 訊息,是 Vibe Coding 的基本素養。

請 AI 改善以下 commit 訊息:

fix bug
update
aaa
改東西
new feature
test123

給 AI 的提示詞:「請把以下 commit 訊息改成符合 Conventional Commits 格式:type(feat / fix / docs / refactor / chore),加冒號,再寫動詞加具體說明,不超過 72 字元。每個訊息加上『改善理由』說明為什麼這樣寫更好。」

原本改善後
fix bugfix: 修正登入時密碼驗證失敗的問題
updaterefactor: 把 SQL 字串拼接改成參數化查詢
new featurefeat: 新增用戶刪除帳號功能(支援 GDPR 刪除請求)
aaa / test123這類 commit 應該在正式 push 前 squash 合併成一筆有意義的記錄

題目三:抓錯(高階)

git 的錯誤不像程式 bug 會馬上報錯,而是悄悄讓你的工作消失、讓 API Key 公開在網路上,或讓團隊的程式碼混亂。找出以下工作流程的所有問題:

# 開發者 A 的操作記錄
git checkout main          # 直接在 main 上開發(問題一)
# 修改了 app.py、.env、config.json
git add .                  # 問題二
git commit -m "done"       # 問題三
git push origin main --force  # 問題四
# 收到 CI 失敗通知,直接 merge PR
# 沒有做 smoke test(問題五)
答案拆解問題一:直接在 main 分支開發。main 應該永遠是穩定的,所有開發都應在 feature 分支進行,再透過 PR 合併。
問題二git add ..env 也加入了,.env 含有 API Key,不能上傳 GitHub,需要 .gitignore 排除。
問題三"done" 是無意義的 commit 訊息,三個月後沒人知道這筆改了什麼。
問題四--force 強制推送覆蓋遠端歷史,會讓其他人的 commit 消失。
問題五:CI 失敗代表自動化測試沒過,這時不應該 merge,必須先修好 CI 再合併。

術語速查表

術語說明
git init在目前目錄初始化 git 倉庫,建立 .git 資料夾。
git status查看目前工作目錄和暫存區的狀態,零風險,隨時可跑。
git add .把所有變更加入暫存區;記得 .gitignore 要先設好,否則會加入 .env。
git commit -m把暫存區的變更永久記錄,附上說明訊息。訊息用 Conventional Commits 格式。
git push把本地 commit 上傳到遠端(GitHub)。--force 是危險選項,謹慎使用。
git pull從遠端下載最新變更並合併到本地。Pull 前先確認本地是乾淨的(git status)。
git log --oneline一行顯示每筆 commit,加 -10 只看最近十筆。按 q 離開。
git checkout -b 名稱建立並切換到新分支,開發新功能時使用,保護 main 分支。
git reset --hard丟棄所有未 commit 的變更,回到指定狀態。不可復原,謹慎使用。
.gitignore列出不需要 git 追蹤的檔案或資料夾,必須包含 .env。
PR(Pull Request)在 GitHub 上發起的合併請求,附上說明讓他人(或自己)審查變更後再合併。
Smoke Test合併前最基本的功能驗證:程式能啟動、核心功能能跑、沒有明顯崩潰。
Conventional Commitscommit 訊息規範,格式為 type: 說明,常見 type:feat、fix、docs、refactor、chore。

重點整理與完成清單

六個指令風險速查git status:只讀,零風險。
git add .:進暫存區,可取消,風險低(注意 .gitignore)。
git commit:本地記錄,可 reset,風險低。
git push:上傳 GitHub,別人看得到,風險中。
git pull:合併遠端變更,可能衝突,風險中(先 status)。
git reset --hard:丟棄未存變更,不可復原,風險高。
Vibe Coder Git 三原則讓 AI 大改前先 commit;不確定的提示先問 AI 再按;.env 永遠在 .gitignore 裡。

模組完成清單

能說明 repository、commit、branch、remote、merge 五個概念。
能用六個指令完成日常工作流(status 到 add 到 commit 到 push / pull 到 log)。
知道 IDE 各種 git 提示的含義,能判斷是否安全。
知道 PR 到 smoke test 到 merge 的完整協作流程。
設好 .gitignore,確認 .env 不會被上傳。
完成作業題目一:讀懂 git log 說出開發歷程。
完成作業題目二:請 AI 把壞的 commit 訊息改成 Conventional Commits 格式。
完成作業題目三:找出五個不安全的 git 操作。

延伸學習

把這篇文章分享給需要的人FacebookLINEThreadsX

常見問答

IDE 彈出 git 相關提示,我該怎麼判斷能不能按?
先看它是不是唯讀操作(如 git status、git log),這種零風險隨時可按。牽涉合併衝突或強制推送的提示,先複製提示文字問 AI 這是在做什麼,再決定要不要按確認。
讓 AI 大幅修改程式之前,該做什麼準備?
先執行 git status 確認狀態、git add . 加入變更、git commit -m 存一個安全點,這樣如果 AI 把程式改壞,可以用 git reset --hard HEAD 回到修改前的版本。
git push --force 為什麼危險?
強制推送會覆蓋遠端的 commit 歷史,讓其他人已經上傳的工作直接消失且不可復原。只有獨自開發的個人分支才考慮使用,團隊協作分支盡量避免。
.gitignore 一定要包含哪些檔案?
至少要擋掉 .env(含 API Key)、__pycache__ 與虛擬環境資料夾(venv/、.venv/)、本地資料庫檔(*.db、*.sqlite3)與 IDE 設定資料夾,避免機密與雜訊被上傳到 GitHub。
什麼是 Smoke Test,一定要做嗎?
Smoke Test 是合併前最基本的功能驗證:程式能不能啟動、核心功能有沒有壞掉,不是完整測試。合併前跳過這一步,等於讓沒驗證過的改動直接進主線,風險很高,建議一定要做。