用 Codex Worktree 并行处理两项任务并分别验证

用 Codex Worktree 并行处理两项任务并分别验证

你正在修改结账页面,却也想让 Codex 修复联系页面的一个问题。大约 30 到 45 分钟内,你可以打开两个工作副本,分别检查,再把修改移到合适的位置。你需要 Git 项目、带 Codex 的 ChatGPT 桌面应用,以及运行项目测试的权限。

根据 OpenAI 的 Worktrees 指南,Codex 使用 Git worktree 为同一仓库创建第二个工作副本。两个副本各有自己的文件,但共享 Git 历史。这样可以把两个适合并行的任务分开;你仍要检查 diff、运行测试并审查修改。如果刚开始在仓库中使用 Codex,先看首次使用 Codex CLI 修改代码的指南。

🧰 准备工作

在 ChatGPT 桌面应用中打开项目,选择 Codex。确认项目目录属于 Git 仓库。挑选两个小而独立的任务,例如一个处理结账页面,另一个处理联系页面。如果两个任务会修改同一个文件,或依赖同一项尚未完成的变更,先缩小范围再并行运行。

记录起始分支、文件状态和测试命令。不要在提示中加入密码或客户数据。Codex 任务范围和权限指南详细说明了命令权限。

在 OpenAI 文档中,Local 是你当前打开的工作副本,Worktree 是 Codex 创建的独立 Git 副本,Hand off 会在两者之间转移对话和代码。Worktree 需要 Git。没有 Git 的项目不能按同样方式使用该流程。在手机上查看 worktree,也不意味着任务在手机上运行;Remote 控制的是已连接的电脑或远程环境。

🪜 分步操作

1. 选择足够独立、可以并行的任务

写两张任务卡,每张包含输入、范围和完成标准。例如:“联系表单缺少邮箱时修正错误提示”和“让结账确认按钮的文案更清楚”。不要把“改进用户体验”这样宽泛的要求同时交给两段对话,否则很难判断哪个副本负责哪项修改。

第一个 Codex 对话在 Local 中开始。第二个任务在创建对话时,选择输入框下方的 Worktree。选择起始分支,再发送要求。Codex 会从该分支创建 worktree。OpenAI 说明,新副本默认处于 detached HEAD,即尚未在一个新的独立分支上。

复制下面的模板,替换方括号中的内容:

在 [项目名称] 中,只修改 [页面或组件]。
目标:[修改后的具体行为]。
不要修改 [范围外区域]。
结束前运行 [项目测试命令]。
报告修改过的文件、测试结果和仍未验证的事项。

范围和报告要求让你有依据检查结果。如果仓库的 AGENTS.md 写了团队规则,Codex 也会读取适用于当前目录的说明。参阅用 AGENTS.md 统一团队规则。

2. 让新 worktree 能运行测试

Worktree 是另一个目录。它有起始 Git commit 中的文件,但可能没有已安装的依赖、被 Git 忽略的配置文件,或 Local 中正在运行的服务。出现“缺少 package”错误时,不要立刻认定是 Codex 写错了代码,先检查环境。

OpenAI 的 Local environments 指南允许设置创建 worktree 时运行的 setup script,以及常用命令的 action。这个功能属于 ChatGPT 桌面应用中的 Codex。对于 Node 项目,setup script 可以安装依赖并执行 build。请按你的项目选命令;如果它使用其他包管理器,不要照抄示例。

适用项目的 setup script 示例:
npm install
npm run build

测试 action 示例:
npm test

在应用的 Settings 中配置 local environment。OpenAI 说,配置保存在项目根目录的 .codex 中,也可以提交到 Git 供团队共享。推广前先在一个 worktree 里试用。如果 setup script 需要网络权限或运行成本高的命令,写清谁负责审批。

3. 有意识地处理被忽略的文件

新 worktree 通常没有 .gitignore 排除的文件。如果应用确实需要某个本地文件才能运行,OpenAI 描述了仓库根目录的 .worktreeinclude:列出要复制到 Codex 管理的本地 worktree 的被忽略文件。文档示例包括 .env、.env.local 和自定义配置路径。这是复制文件的机制,不是把它们加入 Git 的命令。

先使用模拟配置文件或测试环境变量。只有清楚文件会复制到哪里、谁能访问目标目录、怎样撤销权限时,才把敏感文件加入列表。OpenAI 明确指出,此复制机制不适用于远程 worktree,也不适用于你从命令行自行创建的 Git worktree。Codex 也不会复制源 symlink,或覆盖已经存在的目标文件。

不要为了让一个测试通过,就把整目录的密钥都加入列表。不需要真实集成时,请使用假数据。确实需要时,在 agent 接触数据前单独检查访问权限和任务范围。

4. 移回 Local 前分别审查结果

Codex 完成后,打开每段对话的 diff。阅读修改文件,在修改所在的 worktree 中运行测试命令;如果是界面问题,还要实际试用界面。Local environments在应用中提供 Git 控件,可查看 diff、添加行内评论、暂存部分修改、提交、推送和创建 pull request。

两个任务分别记录结果。如果两个 worktree 修改同一个文件,请阅读各自的 diff,再决定整合顺序。Git 不能替你解决业务层面的冲突。

5. 决定保留 worktree 还是 Hand off

如果还要在 worktree 中继续工作,使用 Create branch here 在那里创建分支。审查之后再 commit、push、打开 pull request。Git 不允许同一分支同时在两个 worktree 中 checkout。Worktree 仍占用该分支时,不要在 Local 中打开同一分支。

如果需要 Local 中已有的 IDE、开发服务器或环境,在对话标题处使用 Hand off 移回 Local。OpenAI 表示应用会处理所需的 Git 操作。之后再转回去,对话会回到关联的 worktree。尤其当 Local 有尚未提交的修改时,转移前后都要查看 Git 状态。

不要把 Hand off 当成“合并一切”的按钮。转移后仍要检查 diff、测试和分支,也要保留项目的 pull request 审查。大型任务可以参考用 Codex Subagents 分工,但 subagent 的任务分工与两个 Git checkout 是不同机制。

✅ 示例结果

一次试验中,联系页面的任务只改表单,并在其 worktree 中通过 npm test。结账任务只改按钮文案,你在界面检查并测试确认流程。联系任务被创建分支用于 pull request;结账任务则 Hand off 回 Local,使用模拟支付环境测试。团队记录中,两张任务卡、两个 diff 和两份测试结果保持分开。

如果 worktree 缺少依赖,测试无法执行,请记录“尚未验证”。完成 setup 并重新运行测试后,才能更新状态。

💡 改进建议

按任务为对话命名。每个任务保持足够小,方便快速看完 diff。如果必需文件不在 Git 中,在打开 worktree 前就把它列入检查清单,不要等测试失败才寻找。重复的测试命令可以做成共享 action,让新同事使用同一步骤。

OpenAI 表示,Codex 管理的 worktree 可能自动清理。应用默认保留最近 15 个 worktree,Settings 中可以修改数量。正在运行的对话、固定的对话和永久 worktree 不受这项自动清理影响。需要长期环境时,创建 permanent worktree,不要依赖临时副本。

⚠️ 已知限制

Worktree 不会隔离一切。各副本仍共享 Git 元数据,也可能依赖同一台机器上的服务、数据库或端口。两个任务触及同一份真实数据时,仍可能相互干扰。可能写入数据时,请使用测试数据和测试账号。

被 Git 忽略的文件不会自动随 Hand off 移动,除非 Codex 通过 .worktreeinclude 将它们复制进本地 worktree。复制出来的密钥是另一份需要管理访问权限的副本。对于远程 worktree,请确认其独立的环境机制,不要依赖本地复制步骤。

功能和界面可能变化。看不到 Worktree 或 Local environments 时,请确认正在使用 ChatGPT 桌面应用、已经进入 Codex,且项目使用 Git。不要未经核对就把桌面操作步骤套到 Codex CLI 或浏览器会话。

❓ 常见问题

没有 Git 的项目可以创建 Codex Worktree 吗? 不能按本文流程使用。Worktree 依赖 Git。你仍可在项目目录中工作,但这个功能不会提供独立 checkout。

开始之前必须建分支吗? 不必。选择 Worktree 和起始分支后,Codex 默认创建 detached HEAD checkout。想保留并推送修改时,再在 worktree 中创建分支。

为什么测试在 Local 通过,在 Worktree 却失败? 检查依赖、setup script、被忽略的文件、环境变量和依赖的服务。Worktree 是另一个目录,环境可能不同。

Local 和 Worktree 能 checkout 同一分支吗? Git 不允许同一分支同时在两个 worktree 中 checkout。可以使用 Hand off,或根据团队流程创建其他分支。

删除 worktree 会丢失对话吗? OpenAI 表示,对话可能仍在历史记录中。对于 Codex 管理的 worktree,应用清理前会保存 snapshot,重新打开对话时可能提供恢复选项。重要结果仍应按仓库流程 commit 或妥善保存。

官方来源:Worktrees 和 Local environments。OpenAI Learn,核对日期:2026 年 10 月 5 日。

#Codex #GitWorktree #ChatGPT #VibeCoding

更多文章