只要在同一個 repo 上跑超過一個寫程式 Agent,你就需要 git worktree。它讓每個 Agent 在自己的分支、自己的資料夾裡同時作業,彼此不會踩到對方。
git worktree 是什麼?
一般的 clone 只有一個工作樹:一個資料夾、一個簽出的分支。worktree 則是附加在同一個 repo 上的另一個工作資料夾,簽出不同的分支。所有 worktree 共用一份 .git 歷史,在任何一個裡做的 commit,其他 worktree 都立刻看得到,但檔案彼此獨立。
對 Agent 來說,這代表:
- Claude Code 可以在
feat/auth分支、../atlas-auth裡改檔案 - Codex 可以在
feat/search分支、../atlas-search裡改檔案 - 你繼續在主資料夾的
main上審查、跑 App
誰都不會蓋掉別人的修改。
每個任務建一個 worktree
在你的主 repo 資料夾裡:
# new branch + new folder next to the repo
git worktree add ../atlas-auth -b feat/auth
# another one, starting from a specific branch
git worktree add ../atlas-search -b feat/search origin/main
# see them all
git worktree list接著在每個資料夾裡啟動一個 Agent:
cd ../atlas-auth && claude
cd ../atlas-search && codexworktree 資料夾請用任務命名。一個月後 atlas-auth 還看得懂,wt2 就不行了。
或讓 Claude Code 自己建 worktree
較新版本的 Claude Code 可以替你建立 worktree:
claude --worktree feature-auth # or: claude -w feature-auth這會在 .claude/worktrees/feature-auth/ 下建立一個 worktree,開一個名為 worktree-feature-auth 的新分支,並在裡面啟動 Claude。在第二個終端機用另一個名稱再執行一次,就有第二個隔離的工作階段。工作階段進行到一半,也可以直接請 Claude「在 worktree 裡工作」。
Claude Code worktree 文件 裡有幾個細節:
- 把
.claude/worktrees/加進.gitignore,worktree 裡的檔案才不會在主工作目錄中顯示為未追蹤。 - repo 至少要有一個 commit。
- 離開時,Claude 會移除乾淨的 worktree(有命名的會先詢問),還有變更的 worktree 則會問你要不要保留。
.worktreeinclude檔案可以列出要複製到每個新 worktree 的 git 忽略檔案,例如.env。
只有 Claude Code 負責這個任務時,用 claude --worktree。想自己決定資料夾和分支名稱,或要在 worktree 裡跑 Codex 等其他 Agent 時,用一般的 git worktree add。
Agent 開工前,先把 worktree 準備好
新的 worktree 只包含 git 追蹤的檔案。交給 Agent 之前:
- 安裝相依套件。
node_modules、virtualenv 和建置資料夾不會共用。在每個 worktree 裡執行npm install(或對應的指令)。pnpm 這類有共用儲存區的套件管理工具會快很多。 - 複製未追蹤的設定。
.env和本機設定通常被 git 忽略,請複製 App 執行時需要的檔案。用claude --worktree的話,改列在.worktreeinclude裡即可。 - 使用不同的連接埠。 兩個開發伺服器不能同時監聽 3000 埠。第二個請換個埠啟動,例如
PORT=3001 npm run dev。 - 透過追蹤的檔案共用指示。
CLAUDE.md和AGENTS.md都進了 git,每個 worktree 自動都有。
審查、合併與清理
Agent 做完後:
# in the worktree: check the work
git diff main...feat/auth
npm test
# in the main folder: merge
git merge feat/auth
# remove the worktree folder and its registration
git worktree remove ../atlas-auth
git branch -d feat/auth如果你是手動刪掉 worktree 資料夾,請執行 git worktree prune 清掉殘留的紀錄。
常見陷阱
- 「Branch is already checked out.」 一個分支同一時間只能在一個 worktree 裡簽出。請替每個 worktree 建立新分支。
- 被遺忘的 worktree。 舊的 worktree 會讓分支一直留著,也佔硬碟空間。偶爾執行一下
git worktree list。 - 移除時還有未 commit 的變更。 worktree 有變更時,
git worktree remove會拒絕執行。先 commit 或 stash;真的要捨棄,再用--force。 - Agent 改到主資料夾。 每個 Agent 都要從它的 worktree 資料夾裡啟動,不要從 repo 根目錄啟動。
Vibe Console 裡的 worktree
Vibe Console 讓你在 Agent 作業時,隨時看得到 worktree:
- 原始碼控制(⌘⇧G)裡的 Worktree 分頁會列出每個 worktree 和它的分支,並標示主 worktree 和分離(detached)的簽出。
- 把 worktree 拖到終端機上 就會貼上它的路徑,再按 ⌘K 在那裡啟動 Agent。
- 做完後用 「移除 worktree」 清掉,如果還有本機變更,會要求你按 「強制移除」。主 worktree 受到保護。
- 格狀排列最多顯示九個終端機,每個 worktree 的 Agent 都能有自己的窗格。請看 平行執行 Agent。
依上面的方式用 git worktree add 或 claude --worktree 建立 worktree,兩種都會立刻出現在列表裡。
常見問題
worktree 很佔硬碟空間嗎?
只佔簽出的檔案和你安裝進去的東西。git 歷史是共用的。
該用 worktree 還是另外 clone?
用 worktree。它們共用同一份歷史,分支和 commit 到處都能立刻取用,清理也只要一行指令。
兩個 Agent 可以共用一個 worktree 嗎?
只有在最多一個會改檔案時可以。只讀不寫的審查 Agent,可以和負責寫程式的 Agent 共用同一個 worktree。
免費試用 14 天:下載 Vibe Console。
