Skip to content

一个仓库并行干活:claude --worktree 怎么用

一边写功能一边修线上问题,单工作目录只能 stash、切分支、再切回来。编辑器里开着的文件和跑着的服务都会断。Git worktree 给同一仓库挂多个目录;Claude Code 把它收成一条命令。

它只管文件隔离。子代理管委派,Agent Teams 管队友互聊。怎么选见 Agent Teams子代理。字段以官方 Worktrees 页和你本机 claude --version 为准。

一条命令起隔离会话

仓库至少要有一次提交。在项目根:

bash
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 一样:

text
.env
.env.local
config/secrets.json

只有「匹配规则且确实被 ignore」的文件会复制,已跟踪文件不会再拷一份。对 --worktree、子代理 worktree、桌面版并行会话都生效。用钩子替换创建逻辑时,这个文件不再生效,要在钩子里自己拷。

每个 worktree 仍要各自装依赖、起开发环境。磁盘和 node_modules 会成倍涨,pnpm 一类共享缓存更省。

从哪条分支切,以及审 PR

默认从远程默认分支切(worktree.baseReffresh)。要带着本地未推提交和当前特性分支状态:

json
{
  "worktree": {
    "baseRef": "head"
  }
}

只认 freshhead,不能填任意引用。从指定已有分支开,仍用手动 git worktree add

审别人的 PR,把号写成 #1234 或贴 GitHub / GitLab 链接:

bash
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 一样。

拿不准的改动,可以在隔离目录里开计划模式:

bash
claude --worktree experiment-x --permission-mode plan

会话中 Shift+Tab 切到计划模式也可以。先看方案,不满意整棵树丢掉。

同一分支不能被两个 worktree 同时检出。几路测试若抢同一端口或同一本地库,文件隔离也救不了,要分开环境。

续跑用 claude --continueclaude --resume。从主目录续,一般能回到原来的 worktree;目录被删了会回启动目录并清掉绑定。

Claude-cn.org,专注于 Claude Code 中文教程