跳至主要內容
Vibe Console

Git Worktree 教學:讓 Claude Code 與 Codex 平行開發

用 git worktree 讓 Claude Code、Codex 等 AI Agent 同時在不同分支作業、互不衝突:指令、設定技巧、常見陷阱與清理方式。

Nes

Nes

@nesdesignco

· 閱讀時間 6 分鐘

示意圖:main 分支加上兩個 git worktree,../atlas-auth 執行 Claude Code,../atlas-search 執行 Codex

只要在同一個 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 && codex

worktree 資料夾請用任務命名。一個月後 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。

給你的 Agent 一個視窗。

免費試用 14 天,之後 每月 $4.99 或每年 $39.99。