Cursor 內建 Worktree 進階應用:多任務並行與 Apply 策略

06-cursor-cli-with-worktree 講的是手動建 worktree 搭配 CLI 並行;這篇講的是 Cursor 自動建立的 worktree——也就是你在 Cursor IDE 裡開並行 Agent 或 Best-of-N 時,Cursor 在背後幫你建的那些沙盒。
重點放在實戰:多任務怎麼排、Apply 時選哪個選項、衝突怎麼收、以及日常怎麼管理。
多任務並行:拆開跑、驗收後挑著 Apply
同一個需求可以拆成多個子任務,各自開一個 Agent 在獨立 worktree 跑,最後只 Apply 你滿意的那幾個。
例子:你想同時做「重構 utils」「補單元測試」「產 API 文件」:
- 開三個並行 Agent,各自給不同 prompt
- 跑完後有三個結果——也許「重構」很滿意、「測試」要微調、「文件」直接丟掉
- 只對「重構」那張卡片按 Apply,其他不動
主目錄只收你驗收過的,沒通過的就讓 worktree 靜靜待著,不會影響主分支。
Apply 時:Merge vs Full Overwrite 怎麼選
Apply 時 Cursor 會嘗試乾淨合併;若有衝突會問你:
| 選項 | 什麼時候用 |
|---|---|
| Merge(衝突解決 UI) | 想保留主分支部分內容,或多個 worktree 的改動要「挑段落合併」 |
| Full Overwrite | 確定以 worktree 的內容為準,整檔替換;或衝突太多直接以這張卡為唯一真相 |
實務上:單一任務、單一 Agent、改的檔案少 → 直接 merge 多半沒問題。若同一份需求跑了多個模型(Best-of-N),想從 A 卡 Apply 一部分、再從 B 卡 Apply 另一部分——這時容易衝突,最好只選一張卡 Apply,或用 merge 逐檔手動選。不要對同一批檔案混用多張 Full Overwrite,會互相蓋掉。
主目錄有未提交變更時
Cursor 建立 worktree 時,會把主目錄已追蹤的變更與新檔帶進去(.gitignore 的不帶)。這表示:
- 主目錄有 WIP → 開 worktree Agent → Agent 在你「當前狀態」的基礎上改 → Apply 時要處理「你的未提交變更 + Agent 改動」的合併
想讓並行任務從乾淨的 main 出發,先 git stash 或 commit 再開 worktree,避免「半成品 + Agent 改動」混在一起。
反過來說,這個特性也可以刻意利用:留一點 WIP 在主目錄,開 worktree 做實驗,Apply 時用 merge 只把實驗裡滿意的部分帶回來。
用 git worktree list 做日常管理
Cursor 建的 worktree 路徑通常在 .cursor/worktrees/<repo>/<id>,可以用 git 指令查:
git worktree listApply 完、確認主分支沒問題後,Cursor 會自動管理數量。如果列表裡 worktree 很多、磁碟吃緊,可以查 Cursor 設定(如 cursor.worktreeMaxCount、清理間隔),或關掉不用的 Cursor 專案視窗讓舊 worktree 被清掉。
除錯時用這個指令查一下,就知道目前有幾個沙盒在、對應哪個 branch,不會搞混主目錄和 Agent 的目錄。
不建議手動 git worktree remove Cursor 建的路徑,除非你確定那個 Agent 已不用——否則可能跟 Cursor 內部狀態不一致。
兩個 Agent 改到同一個檔案怎麼辦
若你同時開兩個 Agent,一個改 src/auth/、一個改 src/api/,通常不會衝突,各自 Apply 即可。
但若兩個 Agent 都動到同一個檔案(例如都改 package.json 或同一個 config.ts):
- 先 Apply 第一個 → 主目錄有變更
- 再 Apply 第二個 → 進入合併流程,可能出現衝突
- 用衝突解決 UI 手動選「留哪一段」,或第二個 worktree 的版本你要整份採用,選 Full Overwrite
最省事的策略:規劃並行任務時,讓每個 Agent 動的檔案集合不重疊——一個負責前端目錄、一個負責後端目錄——Apply 時幾乎不需要手動解衝突。
並行任務的核心原則是拆清楚:任務拆清楚、每個 Agent 改的範圍拆清楚、Apply 的時機拆清楚。拆得越清楚,合回去越順。
下一步:09-worktree-advanced — Best-of-N 多模型比較、worktrees.json 自動安裝依賴。