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 Code | Codex(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 都会运行这些命令。