知識分享 · Vibe Coding
不會寫程式也要懂的 Git:AI 問你「要不要 commit?」時,它到底在問什麼
commit 是遊戲存檔、push 才是上傳、branch 是平行時空、worktree 是第二張辦公桌。用一個「AI 做記帳軟體」的故事,把 Vibe Coder 每天被轟炸的十個名詞一次講成人話。
你一定遇過這個時刻
如果你沒有程式背景、最近卻迷上了用 AI 寫程式(所謂的 vibe coding),你絕對遇過這種狀況:Claude 或 Cursor 突然問你 ——「要不要 commit?」「要不要開個分支?」「要不要發個 PR?」這些聽起來像外星文的術語,背後全指向同一個東西:Git。
這支影片的立場我們非常認同:這個時代你不需要背 Git 指令,但一定要聽得懂這些名詞在問什麼 —— 因為 AI 會動手,你只要會做決策。影片用一條故事線講完全部:Gary 心血來潮,打開 Claude Code 請 AI 做一個記帳軟體……
GitHub 是雲端倉庫,Git 是存檔系統
AI 把第一版畫面做出來了,Gary 想:這些程式放哪?總不能只留在這台電腦裡。有沒有像 Google Drive 一樣的東西?—— 有,就是 GitHub:程式碼專用的 Google Drive,工程師把程式碼放上去,有權限的人都能看、能一起編輯。
但 GitHub 跟 Google Drive 有個關鍵差異:它不收「單純的檔案」,只收「有版本紀錄的專案」。什麼是版本紀錄?想想你寫報告的資料夾:「報告v1」「報告最終版」「報告打死不改版」—— 那就是土法煉鋼的版本紀錄。而幫程式碼自動做這件事的工具,就是 Git。
git init,意思只是「請 Git 開始追蹤這個資料夾的所有變動」。為什麼非要它不可?因為 AI 可能把好好的程式改壞 —— 沒有 Git,你不知道它動了哪些檔案、也回不去;有了 Git,隨時能回溯到上一個正常的樣子。
commit・push・pull・clone:一張圖看懂
Gary 好不容易把登入頁面做出來了,想「先存個檔,萬一 AI 之後改壞還能退回來」—— 這個念頭對應的動作就是 commit:像打大魔王前手動存檔,把現在這個正常狀態永久封存成一個檢查點。之後 AI 就算發瘋把程式全刪了,都能瞬間還原。
最容易搞混的觀念:commit 不是上傳。它只是在你自己電腦裡存檔;真的把存檔推上雲端的動作叫 push。朋友想加入開發,用 clone 把整個專案(連同版本紀錄)抓下來;朋友推了新進度,你用 pull 把最新版拉回自己電腦。
合作的基本循環:clone 一次,之後 commit(存檔)→ push(上雲端)→ pull(同步別人的進度)。
順帶破譯 AI 常吐出的那句咒語 ——「push 到 origin main」:remote 是遠端(相對於你電腦的 local)、origin 通常就是你在 GitHub 上的那個專案、main 是專案的官方正式版。整句翻成白話:「把現在寫好的正式版本,傳到雲端的專案資料夾裡」。就這樣。
push 之前:金鑰千萬不能上傳
Gary 的記帳軟體裡藏了一把串接金流的 API 金鑰 —— 把它想成你家大門的鑰匙。程式改壞了都還有救,但金鑰跟著 push 上 GitHub,等於把鑰匙公開貼在網路上,任何人都能撿去用,甚至盜刷你的帳。而且外洩了就救不回來,只能整把作廢重新申請,像信用卡被盜刷只能掛失補發。
.gitignore 的檔案:告訴 Git「這些檔案不要追蹤、絕對不要上傳」。你不用背哪些該擋,push 之前直接跟 AI 說一句:「幫我確認 env 檔、密碼和各種金鑰都已經放進 gitignore,絕對不要 commit 上去」就可以了。這句話值得抄下來。
branch 與 worktree:辦公桌的比喻
Gary 要開發大功能(加資料庫)了。他不敢直接在穩定的 main 上動手 —— 因為 AI 寫複雜功能不會一次就對,會反覆試錯;試錯期間你的程式一直處於半壞狀態,朋友突然想看 demo、或要緊急改個錯字,你就尷尬了。你可能想:「我會 commit 了啊,改壞退回去不就好?」—— 問題是試錯期間的每一步都髒在 main 上,門面沒有一刻是好的。
所以要開 branch(分支)。影片的比喻很妙:你的專案資料夾是一張神奇辦公桌,branch 是桌邊的平行時空切換按鈕 —— 按下 main,桌上是穩定版;按下功能分支,桌上瞬間換成開發中的草稿。草稿被 AI 改爛了?整條分支刪掉、切回 main,main 毫髮無傷。
一張桌子切時空(branch)不夠用時,就再買一張桌子(worktree)。
worktree 是新時代的產物:以前工程師一次專心做一件事,很少用它;現在你可能同時開兩三個 AI Agent 平行做事 —— 一個做資料庫、一個改 UI —— 硬讓它們共用一個資料夾會出亂子。跟 AI 說「開一個新的 worktree」,它就會在電腦裡生出一個全新的獨立資料夾(第二張實體辦公桌),兩張桌子連著同一個 Git 記憶庫,各改各的、互不干擾。
PR、merge 與 conflict:交作業與吵架調解
功能寫完了,合併回 main 之前想先給朋友檢查 —— 這個動作叫開 PR(Pull Request,改動提案)。你也不用自己動手:跟 AI 說「幫我把這條 branch 開一個 PR,說明做了什麼、改了哪些檔案、怎麼測試」,它就會把提案整理得清清楚楚。大家審過沒問題,在 GitHub 按下 merge,雲端的 main 就正式更新。
合併時有時會遇到 conflict(衝突):同一段程式碼出現了兩個版本,Git 不知道聽誰的。現在的 AI 工具會自己分析兩邊要幹嘛,用三種方式處理:二選一(一邊明顯較新或修了 bug)、兩邊都留(其實只是各自新增不同項目,Git 太死板誤判成衝突)、打掉重寫(硬拼會出錯,就看懂雙方目的後重寫那一段)。但如果兩邊在產品邏輯上真的互斥,AI 會卡住 —— 這時你要做的不是下去改程式,而是給出產品決策:「以朋友的邏輯為主,但把我的理財分類移到進階選單」。方向講清楚,AI 就能把衝突接合起來。
改壞了怎麼救:restore 與 revert
Vibe Coder 每天最怕的時刻:AI 把程式改壞了。分兩種情境:
- 還沒 commit → 用 restore:一鍵讀檔,回到上一個存檔點,當作剛剛的事沒發生過。
- 已經 commit 了 → 用 revert:注意它不是偷偷刪歷史,而是新增一個「反向的 commit」把錯誤抵消掉 —— 協作時特別安全,因為所有人都看得到「加錯了、又被抵消」的完整過程,不會覺得進度憑空消失。
最棒的是這些你都不用背:發現改壞時直接跟 AI 說「剛剛這次的改動我不要了,幫我回到上一個正常的版本」,它會自己判斷該用哪一招。
名詞對照表
| 名詞 | 白話 | 你可以跟 AI 說 |
|---|---|---|
| Git/GitHub | 本機存檔系統/雲端程式倉庫 | 「幫我設定 Git,然後把專案放上 GitHub」 |
| commit | 打魔王前的手動存檔(在本機) | 「這版測試沒問題,幫我 commit,訊息寫清楚改了什麼」 |
| push/pull | 把存檔推上雲端/把雲端最新版拉回來 | 「push 前先確認金鑰都在 gitignore 裡」 |
| clone | 整包抓下來加入專案(≠ Download ZIP) | 「幫我 clone 這個專案」 |
| branch | 平行時空:草稿與正式版井水不犯河水 | 「開一條新 branch 做這個功能,絕對不要動到 main」 |
| worktree | 第二張實體辦公桌,多個 AI 平行做事用 | 「開一個 worktree 讓另一個 agent 改 UI」 |
| PR/merge | 改動提案送審/審完正式併入 main | 「把這條 branch 開成 PR,寫清楚怎麼測試」 |
| conflict | 同段程式兩個版本,Git 在等你的產品決策 | 「解掉 conflict,邏輯以他的為主、我的分類移到進階選單」 |
| restore/revert | 沒 commit 的一鍵讀檔/已 commit 的反向抵消 | 「剛剛的改動我不要了,回到上一個正常版本」 |
互動實驗室:AI 這句話在問什麼?
AI 丟出這些問題時,它其實在問你一個決策。點選看白話翻譯:
參考與引用來源 (References & Sources)
- 1. 原影片來源 (Original Video) https://www.youtube.com/watch?v=atqcAb7MFAM
- 2. GitHub https://github.com/
- 3. Git 官方網站 https://git-scm.com/