主题
06.7 Worktrees 与并行开发
用 git worktree 让多个 Claude 会话在隔离的分支上同时干活,互不干扰。
读完你能做什么:并行推进多个任务,安全地做高风险实验,并管理后台会话。
一、问题:单会话单分支的瓶颈
传统方式下,你在一个目录里一次只能做一件事:
text
改功能 A → 切分支要 stash → 改功能 B → 又要切回来 → 上下文全乱而且,高风险实验(大重构、依赖升级)会污染你的工作目录。
Worktree 解决这两个问题。
二、什么是 Worktree
Git worktree 是同一个仓库的多个独立检出目录,每个可以在不同分支上,共享同一个 .git。
text
my-repo/ ← 主工作树(main 分支)
├── .git/
└── ...
my-repo/.claude/worktrees/
├── feature-auth/ ← worktree 1(feat/auth 分支)
├── refactor-db/ ← worktree 2(refactor/db 分支)
└── experiment-new-arch/ ← worktree 3(实验分支)三个 Claude 会话可以在三个 worktree 里同时工作,各自独立。
三、用 Claude Code 启动 Worktree
bash
# 在自动命名的 worktree 里启动
claude -w
# 指定名字
claude -w feature-auth
# 从一个 PR 创建 worktree
claude -w '#123'
claude -w https://github.com/org/repo/pull/123它会在 <repo>/.claude/worktrees/<name> 创建 worktree 并在其中启动会话。
3.1 worktree 的基分支
默认从你的默认分支(通常是 main)分叉,而不是当前 HEAD。这保证实验从一个干净的基线开始。
3.2 配合 tmux 多窗格
bash
claude -w feature-auth --tmux # 为 worktree 创建 tmux 会话
claude -w feature-auth --tmux=classic # 传统 tmux(不用 iTerm2 原生窗格)四、后台会话
Worktree 常和后台会话配合,实现真正的并行。
4.1 启动后台会话
bash
claude --bg "调查这个 flaky test 到底为什么不稳定"
# 立即返回,打印 session ID 和管理命令4.2 管理后台会话
bash
claude agents # 打开 agent view,可视化监控所有并行会话
claude agents --json # 以 JSON 输出(脚本用)
claude attach <id> # 把某个后台会话接管到当前终端
claude logs <id> # 看某会话的近期输出
claude stop <id> # 停止(transcript 和 worktree 保留)
claude respawn <id> # 重启(对话保留,可用于升级 binary 后)
claude rm <id> # 从列表移除(transcript 仍在,可 --resume)4.3 会话内
text
> /tasks # 查看后台工作
> /fork # 把当前对话复制成一个后台会话
> /subtask # 派一个子代理,结果回填当前会话五、三种典型的并行模式
模式 1:多功能并行
你有三个独立的功能要做:
bash
# 三个终端,或三个后台会话
claude -w feat-a --bg "实现功能 A:..."
claude -w feat-b --bg "实现功能 B:..."
claude -w feat-c --bg "实现功能 C:..."
# 监控
claude agents三个功能在三个分支上并行推进,互不影响。
模式 2:隔离的高风险实验
bash
# 在隔离 worktree 里试一个激进的重构
claude -w risky-refactor "把整个回调改成 async/await,大胆改,反正是隔离的"- 成功 → 合并回主分支
- 失败 →
claude rm删掉,主工作区毫发无损
worktree 在无改动时会自动清理。
模式 3:A/B 方案对比
bash
# 让两个会话用不同方案实现同一个功能,最后对比
claude -w approach-redis "用 Redis 实现分布式锁:..."
claude -w approach-db "用数据库行锁实现分布式锁:..."
# 两个都完成后,对比两个分支的 diff 和测试结果六、子代理 + worktree 隔离
子代理可以声明在自己的 worktree 里工作(见 06.4):
markdown
---
name: experimenter
description: 在隔离环境尝试有风险的方案
isolation: worktree
tools: Read, Edit, Write, Bash
---
你在隔离 worktree 中工作,大胆尝试。最后报告方案是否可行。这样连子代理的改动都是隔离的,主工作区完全不受影响。
七、Remote Control:远程干预并行会话
后台会话在跑,你想在手机上查看或干预?
bash
# 启动带远程控制的会话
claude --remote-control "支付重构"
claude --rc "支付重构" # 简写text
> /remote-control # 让当前会话可被 claude.ai/手机 App 控制配合手机 App(/mobile 获取下载二维码),你可以在通勤时查看进度、批准操作、调整方向。
八、Web ↔ 本地互通
Claude Code 会话可以在 web 和本地之间迁移:
bash
claude --cloud "修复登录 bug" # 在 claude.ai 上创建 web 会话
claude --teleport # 把 web 会话拉到本地终端text
> /teleport # 会话内把 web 会话拉进来(别名 /tp)用途:在公司用 web 版起个头,回家用本地终端接着干。
九、并行开发的注意事项
| 注意点 | 说明 |
|---|---|
| 共享 .git | 所有 worktree 共享对象库,但工作目录独立 |
| 同一分支不能双开 | 一个分支只能被一个 worktree 检出 |
| 依赖安装 | 每个 worktree 是独立目录,node_modules 等需各自安装(除非用 symlink) |
| 资源 | 多个并行会话同时跑,注意机器 CPU/内存 |
| 成本 | N 个并行会话 = N 份 token 消耗,注意用量 |
| 清理 | 无改动的 worktree 自动清理;有改动的需 claude rm |
十、一个并行工作流实例
周一早上,你有一堆积压任务:
bash
# 1. 三个独立的小 bug,派后台会话并行修
claude -w fix-login --bg "修复 issue #201:登录后跳转错误"
claude -w fix-export --bg "修复 issue #205:导出 Excel 金额精度丢失"
claude -w fix-timezone --bg "修复 issue #208:时区显示错误"
# 2. 一个大重构,在隔离 worktree 里自己盯着做
claude -w refactor-reconcile "重构对账模块,抽出渠道适配层"
# 3. 隔一会儿检查后台进度
claude agents
claude logs fix-login
# 4. 某个后台会话需要你介入
claude attach fix-export
# 5. 完成的合并,失败的删除
claude rm fix-timezone # 这个方案不对,删掉重来一个上午,四个任务并行推进,你的主工作区始终干净。