我对比了两种用 Claude Code 做多任务开发的方式:一种把所有 Agent 塞同一个目录,另一种每个 Agent 分配独立的工作目录。结论很直接------Git worktrees 做隔离,才是团队协作的正解。而且 Claude Code 自带的 -w 标志已经集成了 worktree 创建,一行命令就能启动一个隔离任务。直接走一遍实操------怎么配、怎么用、踩了什么坑。
为什么 worktrees 突然被盯上了
Git worktrees 不是新东西------Git 2.5(2015 年)就引入了。但过去没人当回事,开发者习惯一个仓库一个工作目录,切分支就 git switch。AI Agent 来了以后,问题才暴露出来。
当你给一个 Claude Code Agent 下任务:「重构这个模块的用户服务」,与此同时另一个 Agent 在同一个目录里跑「给该模块写单元测试」。两个 Agent 同时往同一个文件写东西,或者一个切换分支把另一个的工作目录搞乱了,这是最常见的冲突场景。MindStudio 的实测教程里总结了 4 种典型问题:
- File collisions:双写同一文件
- Branch confusion:一个 Agent 切分支,另一个的中途工作被打断
- Context contamination:一个 Agent 读到了另一个未提交的改动,逻辑出错
- Lock conflicts:工具链文件锁互相阻塞
worktrees 的解决思路很简单:每个 Agent 一个独立的工作目录,共享同一个 .git 对象存储,但物理上互不干扰。
捷径:Claude Code 自带的 -w 标志
Claude Code 从某个版本开始内置了 -w(--worktree)标志。直接一行命令,它自动帮你完成所有 worktree 创建工作:
bash
claude -w -p "重构用户服务模块,用 IUserRepository 接口替换旧的 UserRepository 类"
Claude Code 接到这个任务后,自动执行 4 步:
- 为任务创建独立分支(分支名基于任务描述自动生成)
- 将该分支检出一个独立的 worktree 目录
- 在该目录中执行任务,所有改动隔离在 worktree 内
- 完成后 worktree 保留在磁盘上,等你 review 后再合回主分支
你可以同时开多个终端跑多个任务:
bash
# 终端 1
claude -w -p "重构认证模块为 JWT"
# 终端 2
claude -w -p "添加 API 限流中间件"
# 终端 3
claude -w -p "修复登录页面闪退"
每个 claude 进程都有独立的分支、独立的工作目录、独立的上下文。文件不会互相覆盖,测试不会互相干扰,一个任务切分支也不会影响另一个。
任务完成后,review 和合并需要手动操作:
bash
git diff main..feature/jwt-refactor # 审查变更
git checkout main && git merge feature/jwt-refactor # 合回主分支
git worktree remove ../project-jwt-refactor # 清理 worktree
这是有意设计的------AI 写的代码在合入主分支前需要人工审查,-w 只负责隔离执行,不替你做决策。
手动配置:当你需要精细控制时
如果 -w 自动生成的分支名不合你心意,或者你想对 worktrees 做精细管理,也可以手动创建。
先看怎么配。假设你有一个 Git 仓库 my-service:
bash
git branch feature/refactor-user main
git worktree add ../my-service-refactor feature/refactor-user
git branch feature/tests main
git worktree add ../my-service-tests feature/tests
git worktree list
现在你有三个独立目录,每个有自己的分支,共享 Git 对象存储。踩坑:不能在不同 worktree 检出同一个分支。
Claude Code 并行工作:两个 Agent 的现场
配置好之后,启动两个 Claude Code Agent:
终端窗口 1(重构):
bash
cd ~/projects/my-service-refactor
claude -p "重构 user-service.ts:用 IUserRepository 接口替换 UserRepository 类"
终端窗口 2(测试):
bash
cd ~/projects/my-service-tests
claude -p "为 IUserRepository 编写完整单元测试,覆盖正常和异常路径"
两个进程互不干扰,各自在自己的 worktree 中读写文件。
实测感受:两个 Agent 同时跑了 15 分钟。Agent 1 改了 3 个文件,Agent 2 写了 6 个测试文件,各自提交到自己的分支。如果用传统方式,两个 Agent 大概率会卡住。
版本管理:并行合并实操
Agent 并行跑完后,用 git fetch . 从本地 worktree(同一个 .git)拉代码,不走网络:
bash
cd ~/projects/my-service
git fetch . refactor-user:tasks/refactor-user
git merge tasks/refactor-user --no-ff
git fetch . tests:tasks/tests
git merge tasks/tests --no-ff
工具推荐:Worktrunk CLI 与 Mule AI
手动敲 git worktree add 没问题,但管理 5-10 个并行 Agent 时比较烦。Worktrunk CLI(Rust 实现)三条命令搞定:
安装(需要 Rust 环境):
bash
cargo install worktrunk
使用:
bash
worktrunk create agent1 # 创建 worktree
worktrunk switch agent2 # 切换
worktrunk list # 列出所有
Worktrunk 在 .worktrees/ 下创建 worktrees,命名约定避免了目录混乱。Laurent Kempe 从 3 个 worktrees 扩展到 N 个,就是靠这个。不过早期版本删除 worktree 后清理需手动处理。
如果你想要更自动化的方案------从任务拆解到 worktree 创建到分支合并一条龙------可以看看 Mule AI。它实现了一个完全自主的 Git 工作流:自动检测 issue → 创建 worktree → 分配分支 → 执行任务 → push → 创建 PR。它的设计思路是把「人类 review」保留在 PR 环节,不跳过审查。
关于自动合并的边界 :不管是 -w 标志、Worktrunk 还是 Mule AI,都没有做「完成任务自动合并回主分支」这一步。这不是技术做不到------而是有意不做。两个 Agent 改了同一个文件的同一区域时产生的合并冲突,AI 目前无法可靠解决。合入主分支前的代码审查,仍然需要人类把关。
管理 N 个 Agent 的实用技巧
当你从 3 个 worktrees 扩展到 N 个,注意几点:
命名约定 :{任务类型}-{模块}。比如 refactor-user-service。
资源限制 :8 个并行是 M2 Max(64GB RAM)的上限。建议按 逻辑 CPU 核心数 / 2 设置最大并行数。
自动清理 :Agent 完成后 git worktree remove 加分支删除。
检出策略:预定义任务分支模板,Agent 只在该分支内操作。
总结
与其纠结于下一个 AI 模型能多快写出代码,不如想想你的开发流程支不支持并行工作。Git worktrees 不是银弹,它解决的是 Agent 并行开发中最基础的物理隔离问题。Claude Code 的 -w 标志已经把门槛降到最低------一行命令启动一个隔离任务。Worktrunk CLI 和 Mule AI 在管理层面提供了更多能力。
值得强调的是:-w 只是隔离执行工具,它不做自动合并。这不是技术限制------两个 Agent 改了同一文件同一区域产生的合并冲突,目前还没有 AI 能可靠解决。合入主分支前的代码审查,仍然需要人类把关。真正的效率提升,来自好的工程实践加上人的判断力,缺一不可。把并行开发和代码审查结合起来,才是 AI 时代最实用的工程工作流。