Skip to content

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     # 这个方案不对,删掉重来

一个上午,四个任务并行推进,你的主工作区始终干净。


延伸阅读

基于 VitePress 构建 · 内容采用原作者授权