跳到正文
Vibe Console

git worktree 实战:让 Claude Code 和 Codex 并行开发

用 git worktree 让 Claude Code、Codex 等 AI Agent 同时在不同分支上工作、互不冲突:常用命令、配置技巧、常见坑和清理方法。

Nes

Nes

@nesdesignco

· 阅读约 6 分钟

示意图:main 分支下挂着两个 git worktree,../atlas-auth 里跑着 Claude Code,../atlas-search 里跑着 Codex

只要你在一个仓库上跑不止一个编程 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 && codex

worktree 文件夹按任务命名。一个月后,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。

给你的 Agent 一个窗口。

免费试用 14 天,之后 $4.99/月 或 $39.99/年。