Codex、Cursor 和 Claude Code 的 worktree 对比

Codex、Cursor 和 Claude Code 如何用 git worktree 并行运行 agent:worktree 放在哪、建分支还是 detached HEAD、.env 和依赖怎么准备,以及如何清理。

一句话回答:三者都用 git worktree 隔离并行的 agent,但细节不同。Claude Code 把 worktree 放在 .claude/worktrees/,用 worktree-* 分支;Codex 放在 $CODEX_HOME/worktrees,在你建分支之前一直处于 detached HEAD;Cursor 从 Agents 窗口创建 worktree,并按 .cursor/worktrees.json 运行准备命令。

依据各工具 2026 年 11 月的官方文档整理:Claude Code、Codex、Cursor。这些功能变化很快。

一览

Claude CodeCodex(ChatGPT 桌面应用)Cursor
怎么开始claude --worktree <名字>,或在会话中让 Claude 创建在输入框下方选择 “Worktree”Agents 窗口;IDE 里用 /worktree
位置仓库内的 .claude/worktrees/<名字>/$CODEX_HOME/worktrees(可修改)由 Cursor 管理
分支新建 worktree-<名字> 分支detached HEAD,需要时点 “Create branch here”每个 agent 一个独立检出
起点远端默认分支(可设为本地 HEAD)你选的分支,包括其中未提交的改动你的项目
复制 .env.worktreeinclude.worktreeinclude准备命令,如 cp $ROOT_WORKTREE_PATH/.env .env
安装依赖让 Claude 装,或自己装本地环境的准备脚本.cursor/worktrees.json 里的 setup-worktree
清理退出时询问;未命名且干净的会话自动删除默认保留最近 15 个,删除前先快照/delete-worktree

Claude Code

运行 claude --worktree feature-auth,Claude Code 会创建 .claude/worktrees/feature-auth/ 和一个叫 worktree-feature-auth 的分支,从远端默认分支开始。子 agent 可以通过 isolation: worktree 拥有自己的临时 worktree。退出时,未命名会话的干净 worktree 会被自动删除,其余情况会先问你。会话在 worktree 里运行时,Claude Code 会拦截对主目录的修改。完整指南:Claude Code worktree 用法。

Codex

在 ChatGPT 桌面应用里选择 Worktree 和起始分支,Codex 会在 $CODEX_HOME/worktrees 下创建 worktree。它在 detached HEAD 状态下工作,不会自作主张建分支。想保留成果时,点 Create branch here,然后提交、push、开 PR;也可以用 Hand off 把对话移回本地目录。Codex 默认保留最近 15 个托管 worktree,删除前会保存快照。

detached HEAD 也有代价:在那里做的 commit 不属于任何分支。如果在建分支之前 worktree 就被删掉,这些 commit 只能通过 Codex 的快照或 git 的 reflog 找回。

Cursor

Cursor 的 worktree 围绕 Agents 窗口设计:把 agent 启动或移进 worktree,它就有了自己的检出。在 IDE 里,/worktree 在隔离的检出中运行一次任务,/apply-worktree 把结果带回主目录,/delete-worktree 负责清理。它的准备流程是三者中最容易脚本化的:.cursor/worktrees.json 里写 npm ci、cp $ROOT_WORKTREE_PATH/.env .env 这样的命令,Unix 和 Windows 可以分开配置。Cursor 不建议把依赖用符号链接放进 worktree。

该用哪个?

  • 常驻终端:Claude Code 的 --worktree 最透明,目录和分支都是普通的 git 对象,看得见也能写脚本。
  • 经常开一次性任务:Codex 的 detached、会自动清理的 worktree 最不占地方。只是要记得,想保留的工作得先建分支。
  • 环境准备很重:Cursor 的 worktrees.json 会自动跑安装和迁移步骤。
  • 不止用一个:这很常见。很多开发者同时用 Claude Code 和 Codex,worktree 就分散在两个地方,命名方式也不同。

一个视图看全部

每个工具只显示自己的 worktree。Orchard 显示全部:你 Mac 上所有项目的所有 worktree,不管是 Claude Code、Codex、Cursor Agent、Gemini CLI、Aider、opencode、Amp 还是 Goose 创建的。它把 detached HEAD 上的 commit 也算作未落地的工作,Codex 那些没有分支的 commit 不会丢。它还显示哪个 agent 在哪里工作,以及哪些 worktree 已经进了 main、可以清理。

常见问题

Codex 的 worktree 存在哪里?

ChatGPT 桌面应用默认把 Codex 托管的 worktree 建在 $CODEX_HOME/worktrees 下。可以在设置的 Worktrees 里修改 worktree 根目录。

为什么我的 Codex worktree 是 detached HEAD?

这是有意的:Codex 让托管 worktree 从 detached HEAD 开始,避免每个并行对话都建一个分支。想提交、push 和开 PR 时,点对话顶部的 Create branch here。

怎么把 .env 复制进 Cursor 的 worktree?

在 .cursor/worktrees.json 的 setup-worktree 里加一条准备命令,比如 cp $ROOT_WORKTREE_PATH/.env .env。Cursor 每次创建 worktree 都会运行这些命令。