Codex 工作树教程:让 Codex 在后台并行干活不打扰你
Codex 桌面版的工作树功能让 Codex 在独立的 Git 检出里干活,不影响你本地正在改的代码。本文讲清楚怎么开工作树、怎么用 Hand off 在本地和工作树之间切换,以及常见问题。
一边自己改代码,一边想让 Codex 在同一个项目里做另一件事,两边的改动很容易互相打架。Codex 桌面版的「工作树」(Worktree)功能就是为这个准备的:Codex 在另一份独立的检出里干活,你手上的改动不受影响。本文按官方文档讲清楚工作树怎么开、怎么在本地和工作树之间切换,以及常见问题。
工作树是什么
工作树基于 Git 自带的 worktree 功能,所以项目必须是 Git 仓库。它相当于把仓库再检出一份:每个工作树都有自己的一整套文件,但和原仓库共用同一个 .git(提交、分支等记录),因此可以同时在几个分支上并行工作。
官方文档里有三个说法要先分清:
- Local(本地检出):你自己创建的那份仓库。
- Worktree(工作树):ChatGPT 桌面版从本地检出创建出来的 Git 工作树。
- Handoff(交接):把一个对话在 Local 和 Worktree 之间移动,所需的 Git 操作由 Codex 处理。
可以把 Local 理解为前台,Worktree 理解为后台。
什么时候用工作树
- 想让 Codex 并行干活,又不想打乱自己本地正在改的代码;
- 想排几个后台任务,自己专心做手上的事;
- 先让 Codex 在后台做,等做完再拿到前台来检查、测试。
另外,在 Git 仓库里,定时任务会在专用的后台工作树里运行,不会和你正在做的工作冲突。
开一个工作树对话
- 在新对话界面,输入框下方选择 Worktree。需要的话,可以再选一个本地环境,让它为工作树跑安装脚本。
- 在输入框下方选择工作树基于哪个分支:可以是 main / master、功能分支,或者带着未暂存改动的当前分支。
- 发送提示词,Codex 会基于所选分支创建工作树。默认处于「分离 HEAD」状态,也就是不占用任何分支名。
- 做完后,决定是继续在工作树上干,还是交接回本地。
手机 App 也能启动、指挥、审批和审查工作树对话,但工作树本身仍然在你连接的那台电脑(或它使用的远程开发环境)上,不在手机里。
做完之后的两种走法
走法一:一直在工作树上做。 适合在工作树里就能验证改动的情况(例如已经用本地环境的安装脚本装好了依赖)。点对话顶部的 Create branch here,把工作树变成一个分支,之后就能提交、推送、在 GitHub 上开 Pull Request。顶部的 Open 按钮可以用编辑器打开这个工作树目录。
走法二:交接回本地。 想在常用的编辑器里看改动、用已有的开发服务器跑一遍时,点对话顶部的 Hand off,把对话移到 Local。反过来也行:本地正在进行的对话,也可以交接到工作树,让 Codex 在后台继续做,你腾出前台干别的。每个对话会一直对应同一个工作树,交接回去时还是原来那个。
常见问题和技巧
本地被忽略的文件怎么带过去? 交接靠 Git 操作,.gitignore 里忽略的文件不会跟过去。在仓库根目录建一个 .worktreeinclude,写上要复制的被忽略文件(支持 .gitignore 风格的写法):
.env
.env.local
config/secrets.json
Codex 新建托管工作树时只复制这里列出的被忽略文件,不会覆盖已存在的文件。被忽略的 AGENTS.override.md 会自动复制,不用写进去。这个文件只对桌面版托管的本地工作树生效。
提示分支已被占用怎么办? Git 规定同一个分支同一时间只能在一处检出。如果在工作树上建了 feature/a 分支,再到本地检出它,会看到:
fatal: 'feature/a' is already used by worktree at '<工作树路径>'
要在本地用这个分支,直接用 Hand off 把对话移到本地,不要在两边同时检出。
工作树会占很多硬盘吗? 每个工作树都有自己的文件、依赖和构建缓存。默认保留最近 15 个 Codex 托管的工作树,数量和是否自动删除都能在设置里改。已固定(pinned)的对话、还在进行的对话对应的工作树不会被自动删除;归档对话时对应的工作树会被删除。删除前 Codex 会先保存快照,之后再打开这个对话可以选择恢复。
能改工作树的存放位置吗? 默认放在 $CODEX_HOME/worktrees,在 Settings > Worktrees 里修改 Worktree root 即可。
上手建议
先在一个小仓库里试一次完整流程:选 Worktree 发一个小任务,自己同时在本地继续改别的;任务完成后用 Hand off 拿回本地检查。项目用到 .env 之类的本地配置的,第一步先把 .worktreeinclude 写好。
工作树功能在 ChatGPT 桌面版的 Codex 里使用,用 ChatGPT 账号登录后,用量跟着会员套餐走。想同时让 Codex 多跑几个后台任务的,可以在 BuyBuy代充(buybuytopup.cn) 开通 ChatGPT Pro,用量更充足。