Python
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 addStaging Area(暫存區):準備好要 commit 的變更。
↓
git commitRepository(倉庫):永久記錄的歷史版本。
六個日常指令:按 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 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 的安全操作順序
git status # 確認現在狀態
git add . # 加入所有變更
git commit -m "WIP: 讓 AI 修改前的存檔" # 存一個安全點
# ← 這裡讓 AI 大幅修改程式
# 如果改壞了:
git reset --hard HEAD # 回到上一個 commit(危險但有用)
IDE 彈出提示:可以按還是先等一下?
| IDE 說的話 | 意思 | 安全? |
|---|---|---|
| 「要初始化 Git 倉庫嗎?」 | 在這個資料夾建立 .git 目錄 | 可以 |
| 「有 1 個檔案要 stage」 | git add 一個檔案 | 可以 |
| 「要提交 3 個變更嗎?」 | git commit,先確認訊息 | 確認後可以 |
| 「遠端有新的變更,要拉取嗎?」 | git pull,先確認本地是乾淨的 | 先 status |
| 「偵測到合併衝突」 | 兩份變更有衝突,需要手動解決 | 不要亂按 |
| 「要強制推送嗎?」 | git push --force,會覆蓋遠端 | 先問清楚 |
| 「要 rebase 嗎?」 | 重寫 commit 歷史,進階操作 | 先查清楚 |
| 「要 stash 變更嗎?」 | 暫存到草稿,不 commit | 可以(記得取回) |
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 是什麼?
.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__/
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?
②
c5a1f88 WIP 是「讓 AI 大改之前的安全存檔點」,出問題可以回到這裡,這是 Vibe Coding 的安全習慣。③ 回到指定 commit:
git checkout c5a1f88(查看)或 git reset --hard c5a1f88(丟棄之後的所有變更,危險操作)。題目二:改寫(進階)
請 AI 改善以下 commit 訊息:
fix bug
update
aaa
改東西
new feature
test123
給 AI 的提示詞:「請把以下 commit 訊息改成符合 Conventional Commits 格式:type(feat / fix / docs / refactor / chore),加冒號,再寫動詞加具體說明,不超過 72 字元。每個訊息加上『改善理由』說明為什麼這樣寫更好。」
| 原本 | 改善後 |
|---|---|
| fix bug | fix: 修正登入時密碼驗證失敗的問題 |
| update | refactor: 把 SQL 字串拼接改成參數化查詢 |
| new feature | feat: 新增用戶刪除帳號功能(支援 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(問題五)
問題二:
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 Commits | commit 訊息規範,格式為 type: 說明,常見 type:feat、fix、docs、refactor、chore。 |
重點整理與完成清單
git add .:進暫存區,可取消,風險低(注意 .gitignore)。
git commit:本地記錄,可 reset,風險低。
git push:上傳 GitHub,別人看得到,風險中。
git pull:合併遠端變更,可能衝突,風險中(先 status)。
git reset --hard:丟棄未存變更,不可復原,風險高。
模組完成清單
能說明 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 操作。
延伸學習
HE301|Harness Engineering Architecture(12 小時)
兩天十二小時的架構課,處理的是「第一百次仍然成功」。從能力設計出發,逐層拆解知識、脈絡、記憶、規則、工具、工作流、評估與多代理八種架構,每一種都給治理方式與真實案例。12 章 114 課圖文講義、52 張對照表,附兩天的學員講義與投影片 PDF。課程於 2026 年 8 月 30 日實體開課,完整錄影將於課後上傳。
NT$ 12,999
寫給升國一的你的筆記術
寫給剛升上國中的你:筆記不是寫給老師看的,是寫給考前的自己看的。18 章 85 課圖文,從「為什麼要寫」講到七科各自怎麼記,附 78 份可以印出來寫的練習單,以及 80 課家長專區與 34 張三年筆記養成路徑圖。沒有閱讀期限,國一買、國三還在。
NT$ 3,599

