系列文章: Claudesquad (5/10)

Git Worktree 隔離機制:Claude Squad 讓多個代理人不互相干擾的關鍵
你讓兩個代理人同時工作,一個在加新功能,一個在修 bug——如果它們都在同一個工作目錄裡改同一份程式碼,會發生什麼事?
最好的情況:git 衝突,你要手動解。最壞的情況:一個代理人的改動直接覆蓋了另一個的,你甚至不知道發生了什麼。
Claude Squad 用 git worktree 解決這個問題。這篇說清楚它怎麼運作。
Git Worktree 是什麼
通常你的 git repo 只有一個工作目錄——你在 ~/projects/my-app 這個資料夾裡工作,checkout 到哪個 branch,那個資料夾的檔案就變成那個 branch 的內容。
git worktree 是一個鮮為人知的 git 功能,讓你同時在多個目錄裡 checkout 不同的 branch。每個目錄都是真實的工作目錄,有自己的 branch,修改不會互相影響。
舉個例子:
# 主要工作目錄(main branch)
~/projects/my-app/
# 額外的 worktree(feature/auth branch)
~/projects/my-app--feature-auth/
# 另一個 worktree(bugfix/login branch)
~/projects/my-app--bugfix-login/這三個目錄指向同一個 git repo,但各自 checkout 不同的 branch,互相完全隔離。
Claude Squad 如何使用 Worktree
每次你在 Claude Squad 建立一個新 session,它在背景做了這幾件事:
- 從你目前的 branch 建立一個新 branch(名稱自動生成,包含時間戳)
- 在這個新 branch 上建立一個 git worktree,放在主要工作目錄的旁邊
- 在那個 worktree 目錄裡啟動 tmux session
- 在 tmux session 裡跑你設定的 AI 代理人
代理人的所有操作——讀檔案、改程式碼、建立新檔案——都發生在那個獨立的 worktree 目錄裡。它看不到也碰不到其他 session 的工作目錄。
實際長什麼樣
假設你的 repo 在 ~/projects/my-app,你建立了兩個 Claude Squad session:
~/projects/
├── my-app/ ← 你的主要工作目錄(main branch)
├── my-app--claude-squad-1/ ← Session 1 的 worktree(cs/task-abc123 branch)
└── my-app--claude-squad-2/ ← Session 2 的 worktree(cs/task-def456 branch)
每個 claude-squad-N 目錄都是完整的、可以直接用的工作目錄——你可以 cd 進去看,所有檔案都在,跑 git log 會看到這個 branch 的 commit 歷史。
查看 Worktree 狀態
如果你想看目前有哪些 worktree,在任何一個 worktree 目錄裡跑:
git worktree list輸出大概長這樣:
/Users/you/projects/my-app abc1234 [main]
/Users/you/projects/my-app--cs-1 def5678 [cs/task-feature-readme]
/Users/you/projects/my-app--cs-2 ghi9012 [cs/task-fix-login-bug]
第一欄是路徑,第二欄是目前的 commit hash,第三欄是 branch 名稱。
Session 刪除時 Worktree 也跟著清掉
在 Claude Squad TUI 裡按 D 刪除一個 session,Claude Squad 會:
- 終止 tmux session
- 移除對應的 git worktree
- 從 worktree 清單裡移除那個 branch
你不需要自己手動清。但如果 Claude Squad 異常關閉導致 worktree 沒清乾淨,可以手動清理:
git worktree prune這個指令會清掉所有已經不存在的 worktree 記錄。
把代理人的改動帶回主 Branch
代理人在 worktree 裡跑完了,它的改動在它自己的 branch 上。你要把這些改動帶回主 branch,有幾種方式:
方式一:直接在 Claude Squad 裡 push(推薦)
在 TUI 裡選中那個 session,按 s push 到 GitHub,然後在 GitHub 上開 PR 合併。這是最乾淨的流程,也最容易追蹤。
方式二:在本地 merge
# 確認你在主 branch
git checkout main
# Merge 那個 session 的 branch
git merge cs/task-feature-readme方式三:Cherry-pick 特定 commit
如果那個 session 的 branch 有好幾個 commit,你只想要其中幾個:
git cherry-pick <commit-hash>為什麼這個設計比「多開終端機」好
多開終端機,多個代理人共享同一個工作目錄——任何時候代理人 A 和代理人 B 修改同一個檔案,就是衝突。你沒辦法讓兩個代理人「同時」安全地工作在同一份程式碼上。
Worktree 設計讓「同時工作」變成真正安全的事:每個代理人有自己的 branch、自己的工作目錄、自己的 commit 歷史。你最後做的是 code review 和 merge,而不是修衝突。
這不只是效率問題——這是能不能並行工作的根本差異。
理解了 worktree 隔離之後,下一個值得搞清楚的是 auto-accept 模式——讓代理人在背景跑,你去做別的事,它把任務跑完再通知你。
上一篇:TUI 基本操作:學會那幾個快捷鍵,你就上手了 下一篇:Auto-Accept 模式:讓代理人跑在背景,你去做別的事