先说结论:在 Codex CLI 里回退到之前的消息再改,只会撤销对话,不会撤销代码。我们实测回退时 Codex 直接提示「Conversation reverted to this point. File changes are unchanged.」,之后几轮改过的文件原样留在工作区。想连代码一起回到过去,要靠 git 自己来。
我们用 AICodeWith 的 Key,在 Codex CLI 0.163.0(模型 gpt-6.1-sol)里做了一次完整测试:
- 在一个 git 仓库里连续让 Codex 改了 3 轮,每轮 10 到 12 秒
- 双击 Esc,选中第一条消息,回车回退,不到 2 秒对话就退回去了,原消息自动填回输入框
- 改完提示词重发,12 秒跑完。
git diff显示第二、三轮加的内容和新建的文件全部还在,新内容是接在后面追加的
Codex 怎么编辑之前的消息
CLI:空输入框连按两次 Esc
OpenAI 官方的 Codex CLI 文档在快捷键一节里写得很清楚:在输入框为空时按两次 Escape,就可以编辑上一条用户消息,并从那个位置分叉对话。
实际操作是这样的:
- 先确认输入框是空的,官方写明这个操作要在空输入框下进行
- 连按两次 Esc,底部出现
Browsing transcript · ↑↓/jk scroll · ←→/hl prompts · ^t details · ↵ rewind · esc back - 用 ← → 在你发过的消息之间切换,选中的那条会高亮
- 按回车,对话退回到这条消息之前,原消息自动填进输入框
- 改好提示词,回车重发;不想改了就按 Esc 退出

codex-rewind-file-changes-unchanged
回退之后,被选中那条消息之后的对话就不在当前会话里了。如果只是想看看历史,按 Esc 退出浏览即可,别按回车。
桌面版和 VS Code 插件
Codex 桌面版(ChatGPT 桌面应用里的 Codex)也能编辑之前发过的消息,从 GitHub issue #20287 的反馈里能看到用户在 Codex App 上编辑旧消息。不过截至 2026 年 10 月 18 日,Codex 官方更新日志里没有这个功能的说明,官方也没写编辑后文件会怎么处理,所以本文不对桌面版下结论。
桌面版要用 ChatGPT 账号登录,没法用 API Key 跑,我们这次的测试都在 CLI 里做。不管用哪个客户端,下面的 git 兜底方法都一样适用。还没装 Codex 的可以先看 Codex 下载安装和 Codex 使用教程。
实测:回退之后 git diff 还剩什么
测试仓库里只有一个提交好的 notes.md,内容是「初始内容」。Codex 配置用的是团队标准的全局 ~/.codex/config.toml:
model_provider = "aicodewith"
model = "gpt-6.1-sol"
[model_providers.aicodewith]
name = "aicodewith"
base_url = "https://api.aicodewith.ai/chatgpt/v1"
wire_api = "responses"
experimental_bearer_token = "sk-你的Key"
配置每一项是什么意思,可以看 Codex config.toml 配置详解。
我们在 Codex 交互界面里依次发了三条消息:
| 轮次 | 让 Codex 做的事 | 用时 |
|---|---|---|
| 第一轮 | 在 notes.md 末尾加「第一轮:加了登录功能」 | 12 秒 |
| 第二轮 | 新建 round2.txt,再在 notes.md 加「第二轮:加了支付功能」 | 10 秒 |
| 第三轮 | 新建 round3.txt,再在 notes.md 加「第三轮:加了导出功能」 | 10 秒 |
回退前看一下工作区:
$ git status --short
M notes.md
?? round2.txt
?? round3.txt
然后双击 Esc,选中第一条消息回车,Codex 提示 Conversation reverted to this point. File changes are unchanged.,再看工作区,三个改动一个都没少。
接着我们把第一条消息改成「在 notes.md 末尾加一行:第一轮(改):加了注册功能」并重发,12 秒跑完。最后的 notes.md 是这样的:
# 待办
- 初始内容
- 第一轮:加了登录功能。
- 第二轮:加了支付功能。
- 第三轮:加了导出功能。
- 第一轮(改):加了注册功能。
也就是说,旧的第一轮、第二轮、第三轮改动都还在,改过的提示词是在这个基础上接着改的。round2.txt 和 round3.txt 也没有被删。如果你以为回退能「撤销到第一轮之前」,结果会是新旧两套改动混在一起。
双击 Esc 的两个坑:误触和上下文丢失
GitHub 上有几个和回退相关的 issue,遇到问题前值得看一眼:
- #11626:有人提议给 CLI 加一个
/rewind,让回退时把对话和 Codex 改过的代码一起恢复。issue 里写明了现状:Esc 回退只回退对话历史,不会撤销之后的代码改动,和我们的实测一致。截至 2026 年 10 月 18 日还是 open 状态 - #26348:双击 Esc 太容易误触,而且没有确认、也没法撤销。用 Vim 习惯按 Esc 的人尤其容易中招。提议的方案包括先弹出历史列表、加确认、或者允许改快捷键
- #20287:在 Codex App 里编辑或分叉一条「压缩上下文之前」的消息,之前的上下文会全部丢掉
长对话里 Codex 会自动压缩上下文。如果你要回退的消息很靠前,回退后它可能已经不记得之前聊过的细节,重发时最好把关键要求再写一遍。
安全做法:编辑前先存档,回退后自己撤销代码
Codex 官方的 IDE 插件文档也建议在任务前后打 Git 存档点,方便撤销改动。结合我们的测试,推荐这样做。
1. 开始之前先提交一次,让工作区是干净的:
git add -A
git commit -m "开始让 Codex 改之前的存档"
2. 每轮满意了就提交,这样回退到哪一轮,就能对应找到哪个提交:
git add -A
git commit -m "Codex 第 1 轮"
3. 准备回退并重改之前,先把当前改动收起来。-u 会把新建的文件一起收走,我们实测执行后 round2.txt、round3.txt 和 notes.md 的改动都收进了 stash,工作区回到上一次提交的样子:
git stash push -u -m "回退前的改动"
这时再去 Codex 里双击 Esc 回退、改提示词重发,就是在干净的代码上重来。之前的改动没有丢,想找回来用:
git stash list
git stash pop
4. 已经回退完才想起来,可以手动撤销。下面第一条撤销已跟踪文件的改动;第二条先列出未跟踪的新文件,确认没问题再把 -n 换成 -f 删除:
git restore .
git clean -n
git restore和git clean -f撤销的内容没法找回,执行前先用git status和git diff确认清楚。不确定的时候用上面的git stash push -u,更稳妥。
常见问题
VS Code 插件里能编辑之前的消息吗?
Codex 官方的 IDE 插件文档没有提到编辑历史消息的入口,只建议在任务前后打 Git 存档点来撤销改动。不管插件里有没有这个按钮,用 git 管住代码都是最可靠的办法。
改完重发会再消耗一次额度吗?
会。重发就是一次新的请求,Codex 会带着回退点之前的上下文重新跑一遍,按新请求计入用量。用量怎么算可以看 Codex API 用量说明。
用 API Key 登录也能用双击 Esc 回退吗?
能。我们这次就是只配了 AICodeWith 的 Key,没有登录 ChatGPT 账号,CLI 的回退、编辑、重发都正常。Key 怎么配可以看 Codex API Key 配置。桌面版则需要用 ChatGPT 账号登录。
按错了 Esc 回退了,能撤回吗?
当前界面里没有撤回按钮,这正是 issue #26348 在提的问题。不过我们在测试目录里看到,回退后 Codex 另存了一份新的会话记录,回退前的那份还留在本地 ~/.codex/sessions 里,用 codex resume 打开会话列表就能找回。代码不受影响,因为回退本来就不动文件。
回退会删掉 Codex 新建的文件吗?
不会。我们实测 Codex 在第二、三轮新建的 round2.txt 和 round3.txt,回退到第一条消息后都还在,需要自己用 git clean 或 git stash push -u 处理。
拿到 Key 之后,按 Codex 接入 AICodeWith 教程几分钟就能配好。



