跳转到内容

Worktree vs Subagent 选型

并行干活时,最常被问的一个问题是:用 worktree 还是 subagent?

这俩听起来都像「并行」,但本质完全不同——一个是分身术,一个是外聘顾问。选错了,要么文件冲突打架,要么上下文串台。这一篇给一张完整的对比表,讲清什么时候用哪个、什么时候还能组合用。

先把结论摆前面,后面再展开:

活长、改文件多、互相独立 → worktree;活短、要共享结果 → subagent。

这个判断是核心。记住这一句,后面的细节都是支撑它的理由。

维度 worktree + 并行 session subagent
隔离 独立目录 + 独立分支 同一个工作目录
文件冲突 不可能 可能
上下文 各自独立 共享父上下文
适合 长的独立任务(小时级) 短的并行查询(分钟级)
命令 claude -w <branch> /agents

一行一行拆开看:

  • worktree:每个 session 在独立的 git worktree里——独立的工作目录、独立的分支。物理上分开,谁也碰不到谁的文件。
  • subagent:子代理跑在同一个工作目录里——它能读主会话能读的所有文件,主会话也能看到它的改动痕迹。
  • worktree:两个 agent 在各自目录里改代码,物理上不可能冲突。合并时才需要处理差异,但跑的过程零冲突。
  • subagent:两个子代理可能同时改同一个文件,会冲突。所以 subagent 适合「只读」或「短时」任务,不适合长时间改代码。

上下文:各自独立 vs 共享父上下文

Section titled “上下文:各自独立 vs 共享父上下文”
  • worktree:每个 session 有完全独立的上下文,互不可见。A 不知道 B 在干什么,B 也不知道 A 的进度。
  • subagent:子代理共享父上下文——它能读到主会话积累的信息,干完把摘要交回主会话。信息可以流转。
  • worktree:适合长的独立任务——重构一个模块、实现一个完整功能,可能跑几小时。这种活要改很多文件、要长时间探索,必须隔离。
  • subagent:适合短的并行查询——通读三个目录各出一份摘要、跑一套测试总结结果、审查一片 diff。几分钟到十几分钟,结论要汇总。

worktree 像分身术——你变出几个分身,每个分身在独立的工作空间里干自己的活,互不干扰。

启动一个 worktree 并行 session:

Terminal window
claude -w feature-auth

-w flag 让这个 session 跑在独立的 git worktree 里。你可以同时开好几个:

Terminal window
# 终端 1
claude -w feature-auth
# 终端 2
claude -w feature-payment
# 终端 3
claude -w feature-docs

三个 session 在三个独立的 worktree 里,改各自的代码,零冲突。最后各自 commit、各自 PR,合并回主干。

worktree 的甜区:

  • 重构一个模块(改几十个文件,跑几小时)
  • 实现一个完整功能(前后端各一个,独立分支)
  • 大刀阔斧的改动(不确定能成,worktree 隔离让它敢试)

subagent 像外聘顾问——你雇了个顾问,他在你公司里(同一个工作目录)翻资料、做调研,干完给你一份报告。他能看到你的东西,但不会自己改你的代码(除非你给写权限)。

调用子代理:

/agents

在交互模式里用 /agents 管理子代理——内置的 Explore、Plan、General-purpose,或者你自己定义的。

或者直接派任务:

> 派 Explore 子代理通读 src/auth/ 目录,给我一份模块依赖图。

subagent 的甜区:

  • 通读一片代码出摘要(读得多,结论简单)
  • 跑测试并总结结果(执行 + 总结)
  • 审查 diff 挑问题(只读,给清单)
  • 并行查询多个来源(每个子代理查一处,汇总)

这俩不是非此即彼——高手经常组合用

典型组合:worktree 做主体改动,subagent 在 worktree 内部做辅助探索

1. 开 worktree session 做重构(claude -w refactor-auth)
2. 在这个 session 里,让 Claude 派 Explore subagent 通读老代码
3. subagent 交回摘要,主 session 据此制定方案
4. 主 session 动手改,改完派 review subagent 审查

worktree 提供隔离(不被其他并行任务干扰),subagent 提供上下文隔离(探索过程不污染主会话)。两层隔离叠在一起,既不怕外部冲突,也不怕内部上下文爆炸。

遇到一个并行任务,按这个流程走:

这个活要改很多文件吗?
├─ 是 → 改的文件之间互相依赖吗?
│ ├─ 不依赖 → worktree(隔离改,零冲突)
│ └─ 依赖 → 串行(拆不开就别硬拆)
└─ 否 → 是只读/总结类吗?
├─ 是 → subagent(共享上下文,结论汇总)
└─ 否 → 看时长:小时级 worktree,分钟级 subagent

走完这个流程,基本就知道该用哪个。实在拿不准?先 subagent 探一遍——subagent 失败成本低,跑完发现这活其实得大改,再升级成 worktree。

无论选 worktree 还是 subagent,并行 6 纪律 都适用——只拆真能拆的活、spawn 就改名、卡住立刻中断、3-5 个是甜区。选型解决「用哪个工具」,纪律解决「怎么用得稳」。两篇搭配着读。

worktree 是分身术(独立目录+分支,不可能冲突,适合小时级独立任务,claude -w 启动);subagent 是外聘顾问(共享父上下文,适合分钟级并行查询,/agents 调用)。记法:活长改文件多互相独立 → worktree;活短要共享结果 → subagent。组合用:worktree 做主体、subagent 做内部探索,两层隔离叠加。


下一步,去 实战配方——把这些工作流用到真实任务上。🚀