一、AI 時代的開發模式轉變
「Vibe Coding」不是什麼新的程式語言或框架,而是一種全新的開發模式——AI 驅動的互動式開發。在這個模式底下,程式碼不再只是開發者一個人對著鍵盤敲出來的產物,而是人跟 AI 持續對話、一起摸索碰撞出來的結果。這代表軟體開發方式發生了一次根本性的轉變。
但這種轉變也讓傳統 Git 工作流的瓶頸浮出檯面。
1. 單一工作目錄的限制
傳統 Git 預設一個 repo 只对应一個工作目錄。但在 AI 輔助開發的情境裡,我們經常需要同時嘗試多種做法、走不同的實現路線,只有一個工作目錄根本不够用。
2. 切換分支的代價
切換分支這件事,實際上會在多個層面造成影響:
- stash 的麻煩:切換前得先把改動 stash 起來,但 AI 並不知道這些檔案被收走了
- commit 的壓力:頻繁建臨時 commit 會弄髒歷史,不敢 commit 又會失去回溯能力
- context 斷掉:一切換,AI session 之前累積的上下文(對話紀錄、對專案的理解)瞬間歸零
3. AI session 是有連貫性的
Session A → Session B → Session C 不是單純的命令執行,而是有前後邏輯關聯的。AI 在這個過程中承載了:
- 對話紀錄:理解使用者意圖的完整脈絡
- 檔案狀態認知:AI「知道」目前檔案的結構和依賴關係
- 思考脈絡:多次迭代累積下來的推理過程。AI 還會去讀 git commit 的歷史,理解程式碼是怎麼一步步演化成現在這樣的
切換分支會把這一切打斷,等於讓 AI「換一個腦袋」。最要命的是:沒辦法同時嘗試多種方案。傳統做法下,想試三種架構只能一個一個來:試方案 A → reset → 試方案 B → reset → 試方案 C。這種低效的迭代方式,跟 AI 能快速嘗試的特性直接矛盾。
二、Git Worktree 機制解析
1. 什麼是 Worktree
簡單講,Git Worktree 就是從同一個 .git repo 長出多個工作目錄的機制。這些目錄各自獨立,但又透過 branch 共享同一份歷史。
- repo 共享:所有 worktree 共用同一個
.git目錄,共享完整的 commit history、refs、objects - 獨立工作目錄:每個 worktree 有自己的目錄路徑,可以各自 checkout 不同的 branch。比如從
/path/to/ProjectA派生出/path/to/ProjectA-fix-bug和/path/to/ProjectA-new-feature - 分支獨占:同一個 branch 同一時間只能在一個 worktree 裡被 checkout
跟 clone 的差別:
|
|
2. Worktree 的生命週期

3. 基本指令
|
|
常用的參數:
-b <branch>:建 worktree 的同時建立新 branch--detach:建 detached HEAD 狀態的 worktree(適合用來做一次性實驗)--lock:鎖定 worktree,避免被 prune 誤刪
建議 worktree 的目錄名跟 branch 名保持一致:
|
|
三、為什麼 Vibe Coding 需要 Worktree
1. AI session 真正需要的東西
上下文的連貫性:AI session 不是執行完就結束的單次指令,而是一段持續進行的對話。
- 你:「幫我重構這個模組」
- AI:「我看了依賴關係,建議分三步處理……」
- 你:「第二步看起來有點問題」
- AI:「有道理,我重新調整一下……」
在這段對話中,AI 已經累積了:
- 對專案結構的理解
- 對你個人偏好的掌握
- 之前嘗試過哪些做法的記憶
一切換分支,這條線就斷了。AI 得重新從零建立上下文。
工作環境的穩定性:AI 需要穩定的檔案狀態才能正常運作。檔案突然被 stash 或 reset,AI 的「認知地圖」就失效了:
- 「我記得
auth.ts的 API 介面是……咦,檔案怎麼不見了?」→ 被 stash 收走了 - 「奇怪,我們剛才不是改過……」→ 被 reset 還原了,AI 的「記憶」跟現實對不上
實驗的自由度:AI 輔助開發最大的優勢就是可以快速反覆嘗試。但要真正發揮這個優勢,需要:
- 實驗用的改動不會影響到主線
- 多種做法可以同時並行存在
- 行不通的嘗試可以隨時丟掉,沒有負擔
單一工作目錄做不到這些事。光是在分支之間來回切換,就足以讓狀況變得混亂。
2. 傳統做法的痛點
🔴 痛點 1:切分支 = AI 上下文整個斷掉
情境:你在
develop分支用 AI 開發 feature-A,突然收到緊急 bug 修復需求。傳統做法:
- stash 目前的改動
- checkout 到 hotfix 分支
- 開新的 AI session 處理 bug
- 修完後 checkout 回
developstash pop還原改動 問題:原本的 AI session 已經斷掉,你得重新把 feature-A 的設計思路解釋一遍
🔴 痛點 2:AI 正在改檔案時 stash = AI 找不到檔案
AI 正在編輯
config.ts,你突然需要切換分支。你把改動 stash 起來、切換分支,但 AI 不知道檔案被收走了:
- AI:「我繼續改
config.ts……」- 實際狀況:檔案已經被 stash,AI 改到舊版本去了
結果:
stash pop的時候直接產生衝突**
🔴 痛點 3:探索性的改動 = 弄髒主線或反覆 reset
AI 嘗試三種架構:
- 方案 A:改了 10 個檔案
- 發現有問題,reset 回去
- 方案 B:改了 8 個檔案
- 還是有問題,再 reset
- 方案 C:改了 12 個檔案
結果:主線分支被反覆 reset,commit 歷史整個亂掉;或者因為不敢 commit 而無法回溯之前的狀態
🔴 痛點 4:無法並行 = 只能一個一個試
你想要:
- 讓 AI-1 跟 AI-2 各自開發前端方案 A 跟方案 B,最後二選一
- 讓 AI-3 跟 AI-4 比較不同後端演算法的效能
- 讓 AI-5 跟 AI-6 嘗試不同資料庫 schema,在查詢效率和儲存成本之間找最佳平衡
傳統做法:只能串行。AI-1 試 → reset → AI-2 試 → reset → AI-3 試 效率損失:本來可以三個 AI 同時跑,卻被迫排隊,完全浪費了 AI 快速迭代的能力
四、實戰做法
1. 情境說明
你需要同時開發三個獨立的功能:
- Feature-A:使用者認證模組
- Feature-B:效能優化
- Fix-C:修復某個緊急 bug
傳統困境:只能一個一個做,做完一個才能開始下一個。
Worktree 解法:
|
|
2. 命名規則與目錄管理
命名慣例:
- 功能開發用:
project-feat-{功能名稱} - 實驗探索用:
project-exp-{做法名稱} - bug 修復用:
project-fix-{issue 編號}
保持一致的命名方式,管理跟辨識都比較方便。
建議的目錄結構:
|
|
3. 清理與維護
清理:
|
|
刪 worktree 之前先確認:
- 對應的 branch 是否已經 merge 到 main
- 有沒有還沒 commit 的重要改動
- 有沒有正在使用這個 worktree 的行程(例如還在跑的 AI session)
五、結語
Git Worktree 不是一個小技巧,而是為了配合全新開發模式而需要的系統性解法。傳統 Git 工作流誕生在「一個人連續工作」的年代,而 Vibe Coding 是「多 AI 並行、快速嘗試、重視上下文」的新時代。Worktree 剛好補上了這中間的落差。
開始用 Worktree 之後,你會發現:
- 並行探索變成常態:多個 AI 同時跑,效率直接翻倍
- 實驗不會再弄髒主線:放心試、不行就丟,主 repo 隨時保持乾淨