Worktree vs Subagent 选型
Worktree vs Subagent 选型
Section titled “Worktree vs Subagent 选型”并行干活时,最常被问的一个问题是:用 worktree 还是 subagent?
这俩听起来都像「并行」,但本质完全不同——一个是分身术,一个是外聘顾问。选错了,要么文件冲突打架,要么上下文串台。这一篇给一张完整的对比表,讲清什么时候用哪个、什么时候还能组合用。
先把结论摆前面,后面再展开:
活长、改文件多、互相独立 → worktree;活短、要共享结果 → subagent。
这个判断是核心。记住这一句,后面的细节都是支撑它的理由。
| 维度 | worktree + 并行 session | subagent |
|---|---|---|
| 隔离 | 独立目录 + 独立分支 | 同一个工作目录 |
| 文件冲突 | 不可能 | 可能 |
| 上下文 | 各自独立 | 共享父上下文 |
| 适合 | 长的独立任务(小时级) | 短的并行查询(分钟级) |
| 命令 | claude -w <branch> |
/agents |
一行一行拆开看:
隔离:独立目录 vs 同一目录
Section titled “隔离:独立目录 vs 同一目录”- worktree:每个 session 在独立的 git worktree里——独立的工作目录、独立的分支。物理上分开,谁也碰不到谁的文件。
- subagent:子代理跑在同一个工作目录里——它能读主会话能读的所有文件,主会话也能看到它的改动痕迹。
文件冲突:不可能 vs 可能
Section titled “文件冲突:不可能 vs 可能”- worktree:两个 agent 在各自目录里改代码,物理上不可能冲突。合并时才需要处理差异,但跑的过程零冲突。
- subagent:两个子代理可能同时改同一个文件,会冲突。所以 subagent 适合「只读」或「短时」任务,不适合长时间改代码。
上下文:各自独立 vs 共享父上下文
Section titled “上下文:各自独立 vs 共享父上下文”- worktree:每个 session 有完全独立的上下文,互不可见。A 不知道 B 在干什么,B 也不知道 A 的进度。
- subagent:子代理共享父上下文——它能读到主会话积累的信息,干完把摘要交回主会话。信息可以流转。
适合:小时级 vs 分钟级
Section titled “适合:小时级 vs 分钟级”- worktree:适合长的独立任务——重构一个模块、实现一个完整功能,可能跑几小时。这种活要改很多文件、要长时间探索,必须隔离。
- subagent:适合短的并行查询——通读三个目录各出一份摘要、跑一套测试总结结果、审查一片 diff。几分钟到十几分钟,结论要汇总。
worktree:分身术
Section titled “worktree:分身术”worktree 像分身术——你变出几个分身,每个分身在独立的工作空间里干自己的活,互不干扰。
启动一个 worktree 并行 session:
claude -w feature-auth-w flag 让这个 session 跑在独立的 git worktree 里。你可以同时开好几个:
# 终端 1claude -w feature-auth
# 终端 2claude -w feature-payment
# 终端 3claude -w feature-docs三个 session 在三个独立的 worktree 里,改各自的代码,零冲突。最后各自 commit、各自 PR,合并回主干。
worktree 的甜区:
- 重构一个模块(改几十个文件,跑几小时)
- 实现一个完整功能(前后端各一个,独立分支)
- 大刀阔斧的改动(不确定能成,worktree 隔离让它敢试)
subagent:外聘顾问
Section titled “subagent:外聘顾问”subagent 像外聘顾问——你雇了个顾问,他在你公司里(同一个工作目录)翻资料、做调研,干完给你一份报告。他能看到你的东西,但不会自己改你的代码(除非你给写权限)。
调用子代理:
/agents在交互模式里用 /agents 管理子代理——内置的 Explore、Plan、General-purpose,或者你自己定义的。
或者直接派任务:
> 派 Explore 子代理通读 src/auth/ 目录,给我一份模块依赖图。subagent 的甜区:
- 通读一片代码出摘要(读得多,结论简单)
- 跑测试并总结结果(执行 + 总结)
- 审查 diff 挑问题(只读,给清单)
- 并行查询多个来源(每个子代理查一处,汇总)
什么时候组合用
Section titled “什么时候组合用”这俩不是非此即彼——高手经常组合用。
典型组合:worktree 做主体改动,subagent 在 worktree 内部做辅助探索。
1. 开 worktree session 做重构(claude -w refactor-auth)2. 在这个 session 里,让 Claude 派 Explore subagent 通读老代码3. subagent 交回摘要,主 session 据此制定方案4. 主 session 动手改,改完派 review subagent 审查worktree 提供隔离(不被其他并行任务干扰),subagent 提供上下文隔离(探索过程不污染主会话)。两层隔离叠在一起,既不怕外部冲突,也不怕内部上下文爆炸。
一个判断流程
Section titled “一个判断流程”遇到一个并行任务,按这个流程走:
这个活要改很多文件吗?├─ 是 → 改的文件之间互相依赖吗?│ ├─ 不依赖 → worktree(隔离改,零冲突)│ └─ 依赖 → 串行(拆不开就别硬拆)│└─ 否 → 是只读/总结类吗? ├─ 是 → subagent(共享上下文,结论汇总) └─ 否 → 看时长:小时级 worktree,分钟级 subagent走完这个流程,基本就知道该用哪个。实在拿不准?先 subagent 探一遍——subagent 失败成本低,跑完发现这活其实得大改,再升级成 worktree。
别忘了 6 纪律
Section titled “别忘了 6 纪律”无论选 worktree 还是 subagent,并行 6 纪律 都适用——只拆真能拆的活、spawn 就改名、卡住立刻中断、3-5 个是甜区。选型解决「用哪个工具」,纪律解决「怎么用得稳」。两篇搭配着读。
worktree 是分身术(独立目录+分支,不可能冲突,适合小时级独立任务,claude -w 启动);subagent 是外聘顾问(共享父上下文,适合分钟级并行查询,/agents 调用)。记法:活长改文件多互相独立 → worktree;活短要共享结果 → subagent。组合用:worktree 做主体、subagent 做内部探索,两层隔离叠加。
下一步,去 实战配方——把这些工作流用到真实任务上。🚀