用 Git 工作树隔离多个 AI 编程会话
文章用 Git worktree 为多个 Claude Code 会话分配独立目录和分支,减少互相覆盖修改的问题。还介绍内置工作树命令、分支基准设置,以及依赖安装、环境文件复制和清理注意事项。
AI 深度解读
两个 AI 编程会话同时修改同一个目录,很容易互相覆盖代码。作者给出的办法是:用 Git worktree 为每个 Claude Code 会话分配独立目录和分支,再分别推进任务。原文标注的验证环境是 git 2.54.0、Claude Code 2.1.309,核对日期为 2026-10-23。
这套做法适合把登录、鉴权等任务拆开并行处理。但目录隔离只解决了一部分问题:依赖、环境变量、开发端口,以及多个会话共享的用量额度,都需要另外安排。
先隔离工作目录,才能放心并行修改
Git worktree 可以让同一个仓库拥有多个工作目录,每个目录检出自己的分支。对 AI 编程来说,它的价值很直接:一个会话改登录页面,另一个会话处理其他功能,不必争用同一份磁盘文件。
下面这组命令会从 todo-app 创建登录任务的工作目录,并列出当前 worktree:
cd todo-app
git worktree add ../todo-app-login -b feature/login
git worktree list
关键是第二行:../todo-app-login 是新目录,feature/login 是新分支,两者一起构成这个会话的工作空间。
这里有一条 Git 限制:同一个分支只能同时被一个 worktree 检出。另一个 worktree 再使用它,会报 fatal: 'feature/login' is already used by worktree at ...。
并行会话需要各自的目录,也需要各自的分支。
隔离之后,任务边界仍然要清楚。worktree 能避免两个会话直接踩到彼此的文件,却不会自动消除后续合并时的代码冲突。
Claude Code 能代建目录,但运行环境还得准备
Claude Code 提供了创建 worktree 的入口:
claude --worktree feature-auth
注意 feature-auth 这个名称:原文称,这会创建 .claude/worktrees/feature-auth/,对应的新分支是 worktree-feature-auth。要再开一个会话,就在另一个终端使用不同名称。
作者还给出两个配置提醒:把 .claude/worktrees/ 加入 .gitignore;新 worktree 默认从默认分支创建,如果要接着当前工作起步,需要把 worktree.baseRef 设为 "head"。
新目录也不是现有开发环境的完整副本。它没有 node_modules,也没有被 Git 忽略的 .env,因此每个 worktree 都要安装依赖。原文介绍的 .worktreeinclude 使用 gitignore 语法,可以列入 .env 和 .env.local,让匹配的被忽略文件复制到新 worktree。这里要区分:这是原文在 Claude Code 工作流下介绍的能力,不能直接当成 Git 原生命令的行为。
开发服务还要分配不同端口。数据库也可能共享;即使两个前端服务分别启动成功,仍可能操作同一批数据。
并行会更快消耗额度,结束后也要收拾目录
订阅用量由多个会话共享,包括五小时和每周额度。多开会话会更快触及限制,并不会增加可用额度。
原文引用成本文档称,agent teams 的队友在 plan mode 下运行时,token 消耗约为标准会话的 7 倍。这个数字有明确条件,不能拿来估算所有独立 worktree 会话。作者也表示,没有找到官方公布的最大并行数量。
清理规则则取决于会话怎么运行:
- 交互会话没有产生修改时,未命名 worktree 及其分支会自动删除。
- 有修改时,会询问保留还是移除;保留后可用
claude --worktree <name> --resume恢复。 -p运行会留下 worktree,需要用git worktree remove清理;如果已锁定,先执行git worktree unlock。
Git 自身也有保护:存在已修改或未跟踪文件时,git worktree remove 会拒绝移除。如果直接用 rm 删除目录,则要执行 git worktree prune -v 清理残留记录。
我的判断
这套方案解决的问题很具体:多个 AI 会话需要同时编辑文件时,用独立工作目录降低互相干扰的概率。相比在一个目录里不断切分支,它更适合真正并行的工作。
但原文没有给出完成时间、合并冲突率或总成本的对照数据,因此「并行之后是否更划算」仍是经验判断。它也没展开任务完成后的审查、测试和合并流程。
我更认可把它用于边界清楚、交叉修改较少的任务。如果多个会话都要调整同一个公共组件或接口定义,目录隔离只是把冲突推迟到合并阶段。至于本地数据库,原文指出了共享问题,却没有交代具体隔离方法,需要团队自己补齐。
能拿来做什么
- 同时推进两个相对独立的前端或 Node 任务时,为每个 Claude Code 会话建立不同名称的 worktree,并分别使用独立分支。
- 启动新目录后,先安装依赖、核对
.env和开发端口,再让 AI 运行项目,避免把环境缺失误判成代码故障。 - 如果任务依赖当前尚未进入默认分支的代码,按原文将
worktree.baseRef设为"head",确认新会话从预期起点开始。 - 结束任务时先检查修改和未跟踪文件,再清理 worktree;批量使用
-p后尤其要检查留下的目录。