Git worktree:讓多個 AI agent 並行工作而不互相沖突的基礎

並行執行時,你的 agent 會互相覆蓋對方的工作。Git worktree 用兩條命令就能解決。這篇文章告訴你怎麼用。

你在同一個儲存庫上啟動了兩個 agent。一個在改 package.json,另一個也在改。三十秒後,你的程式碼變成了誰都沒法合併的狀態。

這不是 agent 的 bug,而是因為它們都在同一個資料夾裡幹活。

解決辦法是一個 Git 已經支援多年、卻幾乎沒人用的工具:git worktree。

問題所在:3 個 agent,1 個儲存庫,根本沒法合併

一個普通的 Git 儲存庫就是一個資料夾,同一時間只能簽出一個分支。你在 main 上工作,切換分支時整個資料夾都會跟著變。

現在往這個資料夾裡塞進三個自主 agent。它們會同時寫檔案。Agent A 建立了一個檔案,agent B 跑了個 git checkout 想從乾淨狀態開始,結果把 A 正在做的工作全沖掉了。最後你得到的是一堆寫了一半的檔案、被搞亂的索引,以及一堆衝突,解起來比你自己寫程式碼還費勁。

只有 agent 之間互不干擾,並行才能真正幫你省時間。

git worktree 是什麼

worktree 就是掛在同一個儲存庫上的第二個工作資料夾。

歷史相同、遠端相同,但每個 worktree 都簽出自己的分支,磁碟上也有自己的一套檔案。你可以同時擺五個,每個在不同的分支上,互不打擾。

一個 .git,多個工作區。就這麼簡單。

實戰:每個 agent 一個 worktree

下面是具體做法。在你的儲存庫裡執行:

git worktree add ../project-auth -b feature/auth
git worktree add ../project-billing -b feature/billing
git worktree add ../project-export -b feature/export

你剛剛建立了三個資料夾,每個都在自己的分支上。然後在每個裡啟動一個 agent:

cd ../project-auth && claude
cd ../project-billing && codex

每個 agent 都有自己的資料夾、自己的分支、自己的檔案。auth agent 永遠看不到 billing agent 在幹什麼。不可能撞車。

某個功能做好後,你審查它的分支然後合併。接著清理:

git worktree remove ../project-auth

資料夾沒了,分支還留在你的歷史裡。乾淨利落。

需要知道的 3 個坑

第一個坑:共享的中心檔案。如果兩個功能都得動同一個 routes.ts 或同一個資料庫 schema,worktree 救不了你,合併的時候照樣衝突。一旦某個 agent 碰了大家共用的檔案,其他 agent 就得等,或者繞著走。

第二個坑:分支跑偏。你的 agent 在幹活的同時,main 也在往前走。三天後你的分支已經落後一截,合併起來就很痛苦。要麼趁早、勤快地 rebase,要麼把每次會話控制得短一點。

第三個坑:忘了清理。每個 worktree 都是磁碟上真實存在的資料夾。一天開十個又不清理,你的父目錄很快就亂得沒法看了。git worktree list 能列出還留著哪些,git worktree prune 能清掉已經失效的。

第四個坑:worktree 一開始是空的

worktree 裡只有 Git 跟蹤的檔案。git worktree add 給你的是原始碼,沒有 node_modules,沒有 .venv,沒有存著你本地金鑰的 .env,也沒有建置快取。在全新 worktree 裡啟動的 agent 跑不了測試,起不了開發伺服器,而且往往不說原因:npm test 因為缺模組而失敗,應用因為缺環境變數而失敗,agent 把頭十分鐘花在了管道雜活上,而不是花在工單上。

這個坑我們自己也踩過。一位使用者指出,AgentsRoom 的 worktree 選項藏在 agent 表單的高階選項裡,而且任何在 worktree 裡啟動的 agent 都沒有任何依賴,一個測試都跑不了。兩點都屬實。隔離功能是有的,但如果不做一步誰都記不住的手動操作,它就沒法用。

從 1.194.0 版開始,這個選項放在 agent 表單的隔離區塊裡,不用展開任何東西就能看到,而在全新 worktree 裡啟動的第一個 agent 拿到的已經是準備好的 worktree:AgentsRoom 會從主簽出裡複製匹配某個模式的被忽略檔案(預設是所有 .env*,從不覆蓋,也從不復制進 node_modules 或 .git),然後執行根據 lockfile 檢測出的安裝命令(bun、pnpm、yarn、npm、uv、poetry、pipenv、bundle、composer),或者你在專案設定裡指定的命令。命令在 agent 自己的終端裡執行,所以你看得見,安裝失敗也不會阻止 agent 啟動。每個 worktree 只做一次:worktree 私有 git 目錄裡的一個標記會讓下一次啟動跳過這一步。

如果你手動來做,步驟一樣,一個腳本就能裝下:複製 .env*,執行安裝,然後啟動 agent。把 git worktree add 包進這個腳本里,不然到第三個 agent 你就會忘。

如果你不想自己維護這個腳本,AgentsRoom 的 worktree 管理器就是替你做這件事的工具:每個工單或每個 agent 一個 worktree,在 agent 啟動前準備好,之後在同一個視窗裡審查、提交和合並。

真正的問題:誰來盯著這五個資料夾?

worktree 解決的是檔案衝突,但解決不了你的心智負擔。

你有五個資料夾、五個 agent、五個終端。哪個在等你審查?哪個十分鐘前就跑完了、而你當時正看著別處?哪個崩了?

如果你一直待在終端裡,這就是"每個 agent 一個 worktree"這套做法的天花板。技術上的衝突你解決了,但要盯的視窗也翻了好幾倍。

AgentsRoom 把每個 agent 放到一塊獨立的卡片上,帶著它的狀態和顏色,不管它跑在哪個 worktree 裡。某個 agent 一旦在等你,它就會變紅並提醒你。想了解疊加在 worktree 之上的完整方法,讀一讀如何並行執行 3 到 8 個 agent 而不手忙腳亂。

核心要點

一個 agent,一個 worktree,一個分支。這就是認真做多 agent 工作的基本規則。

命令三行就寫完,好處立竿見影:你的 agent 不再互相覆蓋。再加上一個能告訴你哪個 agent 需要你的檢視,你就真的能同時扛住五件事,而不至於把自己逼瘋。

下載 AgentsRoom

在一個視窗中執行你所有專案的所有 AI 代理。

免費下載 AgentsRoom

配套應用:隨時隨地監控你的 Agent

使用 Claude、Codex、Antigravity CLI 或其他 AI 提供商。

獲取擴充功能
Chrome Web Store

把 Bug 和需求直接傳送到您的公開待辦清單。

多專案管理
多供應商
多代理執行
即時狀態
檔案差異與提交
行動應用
即時預覽
代理團隊
瀏覽器自動化
Backlog 驅動開發
提示詞庫
技能庫
檢視所有功能

繼續閱讀