一句话结论
让多个 AI 编程智能体同时开工而不互相覆盖代码,最可靠的方案就是给每个会话一个独立的 Git Worktree——Claude Code 已经内置 --worktree 标志,两条命令就能把「一个终端改功能、另一个终端修 Bug 」变成日常。
很多团队第一次跑并行 AI 编程时都踩过同一个坑:两个 Claude 会话在同一目录里工作,A 会话刚改完的文件被 B 会话直接覆盖。问题的根源不是智能体不够聪明,而是文件系统只有一个工作副本。 Git Worktree 的价值恰恰在这里:同一个仓库、同一份历史,但每个会话拥有独立的检出目录和分支,物理上不存在编辑冲突。
Git Worktree 到底解决什么问题
Git Worktree 是同一仓库下的多个工作目录,每个目录有自己的分支和文件,但共享 .git 历史。用 Anthropic 官方文档的说法,Worktree 隔离的是「文件编辑」,而子代理协调的是「工作本身」——两者是互补关系,不是替代关系。
| 方案 | 隔离什么 | 适用场景 |
|---|---|---|
| Git Worktree | 文件编辑 | 多会话并行改代码 |
| 子代理(Subagent) | 上下文窗口 | 单会话内拆分任务 |
| 代理团队 | 任务协调 | 跨会话自动分工 |
没有 Worktree 时,两个会话共享同一份未提交状态:会话 A 的半成品代码会让会话 B 的测试挂掉,反过来也一样。有了 Worktree,每个会话从远程默认分支的干净状态出发,互不干扰。
Claude Code 的三种并行玩法
1. 一条命令启动隔离会话
claude --worktree feature-auth
这条命令会在 .claude/worktrees/ 下创建一个新检出,分支名自动带 worktree- 前缀。换一个终端再用不同名字跑一次,就有两个互不干扰的并行会话。省略名字的话,Claude 会自动生成一个类似 bright-running-fox 的代号。
2. 让子代理自带 Worktree
在自定义子代理的定义文件里加一行 isolation: worktree,每次调度这个子代理都会拿到一个临时工作树,完成后无改动则自动删除。官方给过的示例用法:「把所有同步 IO 迁移到异步,批量拆分任务,启动 10 个带工作树隔离的并行代理,每个代理端到端测试自己的改动后提交 PR 。」
3. 手动管理,完全可控
git worktree add ../project-feature-a -b feature-a
cd ../project-feature-a && claude
git worktree list
git worktree remove ../project-feature-a
当你需要检出特定分支、或者把工作树放到仓库目录之外时,直接用 Git 原生命令更灵活。
.env 这类未跟踪文件默认不存在。把文件名写进项目根目录的 .worktreeinclude(语法与 .gitignore 相同),Claude 创建 Worktree 时会自动复制。我们实际跑起来的一条并行流水线
以「改功能 + 修 Bug + 补测试」三线并行为例:
- 项目根目录创建
.worktreeinclude,写入.env等需要复制的环境文件。 - 把
.claude/worktrees/加进.gitignore,避免主检出里出现一堆未跟踪目录。 - 开三个终端,分别执行
claude --worktree feature-dashboard、claude --worktree fix-login-race、claude --worktree tests-api。 - 用
git worktree list查看三个会话各自所在的分支与目录。 - 各会话完成后审查改动,
git merge挑选要保留的分支,最后git worktree remove清理。
清理机制与一个容易忽略的细节
Claude Code 的自动清理规则是:退出会话时如果没有未提交改动、没有未跟踪文件、没有新提交,Worktree 和分支会被自动删除;有任何一项存在,就会提示你保留还是删除。有两个例外值得记住:-p 非交互模式创建的 Worktree 不会自动清理(用 git worktree remove 手动删);子代理和后台会话创建的 Worktree 超过 cleanupPeriodDays 设置后会被自动扫描删除。
另一个细节:Worktree 默认从远程默认分支 origin/HEAD 分出。如果你的工作依赖本地未推送的提交,把设置里的 worktree.baseRef 改成 "head",新 Worktree 就会从当前本地 HEAD 分出,带着你的半成品状态。
常见疑问速查
仓库还没有任何提交能用吗?不能。 Worktree 需要从已有提交检出,空仓库会报 Failed to resolve base branch "HEAD",先做一次初始提交。
不用 Git 的项目怎么办?通过 WorktreeCreate / WorktreeRemove 钩子自定义创建与清理逻辑,SVN 、 Perforce 、 Mercurial 都能接入。注意用钩子时 .worktreeinclude 不再生效,环境文件要在钩子脚本里自己复制。
并行几个会话比较合适?Anthropic 团队的经验是同时保持 3-5 个会话。再多之后,审查改动的时间会超过并行省下的时间。
写在最后
Worktree 并行改造的不只是速度——它把「 AI 改坏了我正在写的东西」这类事故从根源上消除了。配合好分支审查与合并节奏,单人也能跑出小团队的吞吐量。如果你刚入门 AI 编程工作流,建议先读一下Plan/Act 分离的五步工作流,再回头搭并行环境;Claude Code 的 Hooks 自动化也可以顺手配起来,让每个 Worktree 会话都自动执行你的项目规则,项目约定则可以沉淀成项目记忆文件让每个新工作树直接继承。







评论 (0)