一个仓库并行干活:claude --worktree 怎么用
一边写功能一边修线上问题,单工作目录只能 stash、切分支、再切回来。编辑器里开着的文件和跑着的服务都会断。Git worktree 给同一仓库挂多个目录;Claude Code 把它收成一条命令。
它只管文件隔离。子代理管委派,Agent Teams 管队友互聊。怎么选见 Agent Teams 和 子代理。字段以官方 Worktrees 页和你本机 claude --version 为准。
一条命令起隔离会话
仓库至少要有一次提交。在项目根:
claude --worktree feature-auth默认在 .claude/worktrees/feature-auth/ 建目录,分支名大约是 worktree-feature-auth,然后在里面开会话。短选项 -w 等价。第二个终端换个名字再开一路。省略名字会自动生成,例如 bright-running-fox。
跟在后面的是短标识,不是任务描述。不要写成 claude --worktree "帮我加个接口"。
第一次在某目录用之前,先裸跑一次 claude,过工作区信任;否则 --worktree 会退出让你先做这件事。非交互 -p 会跳过信任检查。把 .claude/worktrees/ 写进 .gitignore。
会话里也可以让 Claude「在一个 worktree 里干」。它会用 EnterWorktree。进到仓库 .claude/worktrees/ 以外的路径会先问你;普通权限规则拦不住这句确认,只有 bypassPermissions 会跳过。
.env 不会自动跟过来
新 checkout 不含被忽略的本地文件。项目根放 .worktreeinclude,语法和 .gitignore 一样:
.env
.env.local
config/secrets.json只有「匹配规则且确实被 ignore」的文件会复制,已跟踪文件不会再拷一份。对 --worktree、子代理 worktree、桌面版并行会话都生效。用钩子替换创建逻辑时,这个文件不再生效,要在钩子里自己拷。
每个 worktree 仍要各自装依赖、起开发环境。磁盘和 node_modules 会成倍涨,pnpm 一类共享缓存更省。
从哪条分支切,以及审 PR
默认从远程默认分支切(worktree.baseRef 为 fresh)。要带着本地未推提交和当前特性分支状态:
{
"worktree": {
"baseRef": "head"
}
}只认 fresh 和 head,不能填任意引用。从指定已有分支开,仍用手动 git worktree add。
审别人的 PR,把号写成 #1234 或贴 GitHub / GitLab 链接:
claude --worktree "#1234"会拉到 .claude/worktrees/pr-<号>。审完丢掉,主目录不动。
隔离怎么强制、退出怎么清
在 worktree 会话里,改主 checkout 文件、把命令工作目录指回主目录、把 git 重定向到主目录,都会被拦。子代理从这路会话派出去也一样。
退出交互会话时:
- 干净且未命名:自动删目录和分支
- 干净但有名:先问你是否留着以后续
- 有未提交改动、未跟踪文件或新提交:问保留还是移除;移除会丢掉这些改动
-p 非交互不会在退出时清,要自己 git worktree remove;锁住了先 git worktree unlock。
你自己用 --worktree 建的,不会被按天数的定时清扫干掉。子代理和后台会话建的,超过 cleanupPeriodDays 且没有未保存工作时可被清。复用同名目录会打开已有 worktree,不一定新建。
权限上点「以后都允许」时,较新版本会把规则写到主 checkout 的 .claude/settings.local.json,整仓和各 worktree 共用,删 worktree 也不会丢。
和子代理、计划模式一起用
子代理 frontmatter 加 isolation: worktree,或口头说「给代理们用 worktree」,并行改文件才不容易撞车。基准分支规则和 --worktree 一样。
拿不准的改动,可以在隔离目录里开计划模式:
claude --worktree experiment-x --permission-mode plan会话中 Shift+Tab 切到计划模式也可以。先看方案,不满意整棵树丢掉。
同一分支不能被两个 worktree 同时检出。几路测试若抢同一端口或同一本地库,文件隔离也救不了,要分开环境。
续跑用 claude --continue 或 claude --resume。从主目录续,一般能回到原来的 worktree;目录被删了会回启动目录并清掉绑定。