只要你在一个仓库上跑不止一个编程 Agent,就需要 git worktree。它让每个 Agent 在自己的分支、自己的文件夹里同时工作,谁也不踩谁。
git worktree 是什么?
普通的克隆只有一个工作树:一个文件夹,检出一个分支。worktree 是挂在同一个仓库上的额外工作文件夹,检出的是另一个分支。所有 worktree 共用一份 .git 历史,所以在任何一个里面提交,其他几个都能马上看到,但文件是各自独立的。
对 Agent 来说,这意味着:
- Claude Code 可以在
../atlas-auth里改feat/auth分支的文件 - Codex 可以在
../atlas-search里改feat/search分支的文件 - 你继续在主文件夹的
main上审查代码、运行应用
谁也不会覆盖别人的改动。
每个任务建一个 worktree
在主仓库文件夹里执行:
# new branch + new folder next to the repo
git worktree add ../atlas-auth -b feat/auth
# another one, starting from a specific branch
git worktree add ../atlas-search -b feat/search origin/main
# see them all
git worktree list然后在每个文件夹里各启动一个 Agent:
cd ../atlas-auth && claude
cd ../atlas-search && codexworktree 文件夹按任务命名。一个月后,atlas-auth 还看得懂,wt2 就不知道是什么了。
或者让 Claude Code 帮你建 worktree
新版 Claude Code 可以替你创建 worktree:
claude --worktree feature-auth # or: claude -w feature-auth这条命令会在 .claude/worktrees/feature-auth/ 下创建一个 worktree,新建一个名为 worktree-feature-auth 的分支,并在里面启动 Claude。在第二个终端里换个名字再跑一次,就得到第二个隔离会话。你也可以在会话中途让 Claude “在 worktree 里工作”。
Claude Code worktree 文档 里有几个细节:
- 把
.claude/worktrees/加进.gitignore,免得 worktree 里的文件在主检出里显示为未跟踪。 - 仓库至少要有一次提交。
- 退出时,Claude 会删除没有改动的 worktree(有名字的会先问你),如果 worktree 里还有改动,会问你要不要保留。
.worktreeinclude文件里可以列出.env等被 git 忽略的文件,它们会被复制到每个新 worktree 里。
只有 Claude Code 一个 Agent 做这个任务时,用 claude --worktree。想自己定文件夹和分支名,或者要在 worktree 里跑 Codex 等其他 Agent 时,用普通的 git worktree add。
Agent 启动前,先把 worktree 配好
新 worktree 里只有被 git 跟踪的文件。交给 Agent 之前:
- 安装依赖。
node_modules、虚拟环境和构建目录不会共享。在每个 worktree 里运行npm install(或对应的命令)。pnpm 这类使用共享存储的包管理器会快很多。 - 复制未跟踪的配置。
.env文件和本地设置通常被 git 忽略,把应用运行需要的复制过去。用claude --worktree的话,改为写进.worktreeinclude。 - 用不同端口。 两个开发服务器不能同时监听 3000 端口。第二个换个端口启动,比如
PORT=3001 npm run dev。 - 用被跟踪的文件共享指令。
CLAUDE.md和AGENTS.md都提交进了 git,每个 worktree 自动就有。
审查、合并与清理
Agent 完成后:
# in the worktree: check the work
git diff main...feat/auth
npm test
# in the main folder: merge
git merge feat/auth
# remove the worktree folder and its registration
git worktree remove ../atlas-auth
git branch -d feat/auth如果你是手动删掉的 worktree 文件夹,运行 git worktree prune 清掉过期的记录。
常见坑
- “Branch is already checked out”。 一个分支同一时间只能在一个 worktree 里检出。给每个 worktree 新建分支即可。
- 忘掉的 worktree。 旧 worktree 会让分支一直存在,还占磁盘空间。时不时跑一下
git worktree list。 - 删除时还有未提交的改动。 worktree 里有改动时,
git worktree remove会拒绝执行。先提交或储藏;如果确实要丢弃,就加--force。 - Agent 改到了主文件夹。 每个 Agent 都要从它自己的 worktree 文件夹里启动,而不是从仓库根目录。
在 Vibe Console 里使用 worktree
Vibe Console 让你在 Agent 工作时随时看到所有 worktree:
- 源代码管理(⌘⇧G)里的 Worktree 标签页列出每个 worktree 及其分支,并标出主 worktree 和处于分离状态的检出。
- 把 worktree 拖到终端上就能粘贴它的路径,然后按 ⌘K 在那里启动 Agent。
- 用完后,移除 worktree 帮你清理;如果还有本地改动,会让你确认 强制移除。主 worktree 受保护,不能删。
- 网格最多显示 9 个终端,每个 worktree 的 Agent 都能有自己的面板。参见 并行运行 Agent。
按上面的方法用 git worktree add 或 claude --worktree 创建 worktree,两种方式建好的都会立刻出现在列表里。
常见问题
worktree 很占磁盘吗?
只占检出的文件和你装进去的东西。git 历史是共享的。
用 worktree 还是另外克隆几份?
用 worktree。它们共用一份历史,分支和提交到处都能马上用,清理也只要一条命令。
两个 Agent 能共用一个 worktree 吗?
只有在最多一个 Agent 改文件时才行。只读不写的审查 Agent,可以和写代码的 Agent 共用一个 worktree。
免费试用 14 天:下载 Vibe Console。
