Codex 刚把项目改崩,git reset --hard到底该退到哪一次,很多人是在git log --oneline刷屏之后才意识到自己连 Base URL 都没配。把 Codex 的 Base URL 指到 TaoToken 之前,先去 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 注册并创建 Key,后面读提交历史、判断回退点才有可用的模型通道。这里先说清楚:TaoToken 只提供 Key 和 Base URL,不替你在终端执行 git;git status、git add、git commit、git reset --hard仍然由你本地敲。
常用 Git 工作流本身不复杂:改之前git status,暂存用git add .,提交用git commit -m,推到远端用git push。真正容易乱的是把 Codex 接进来之后:它帮你改代码,通道没配好时你没法让它分析提交历史;通道配好了,又可能一口气改出一堆文件,等你发现不对,已经分不清哪个提交是“修改前备份”,哪个提交是崩坏版本。
这篇不讲花哨命令,按排障顺序走一遍:先看现场,再把 Codex 的~/.codex/config.toml接到 TaoToken,配通后继续用原来的 commit 备份习惯,最后崩了把git log --oneline输出贴回对话,让 Codex 帮你判断回退点,执行还是在你本地。
1. Codex 改崩后,先别把 git reset --hard 敲下去
1.1 git status 和 git log --oneline 先把现场钉住
项目被 Codex 改崩时,最容易犯的错是直接git reset --hard HEAD~1。如果最近一次提交刚好是“修改前备份”,而 Codex 的修改还在工作区,HEAD~1会把备份也一起退掉,现场更乱。先看两个输出:
git status --short git log --oneline -n 20git status --short告诉你哪些文件被改、哪些已经暂存、哪些是新文件。git log --oneline -n 20给你最近 20 条提交的短哈希和提交信息。你要找的是类似修改前备份、feat: 保存当前进度、before codex这类提交。找到之后,还要判断 Codex 的崩坏修改有没有被提交:如果没提交,工作区就是脏的;如果提交了,git log里会多出新的提交。
这里不要只盯着HEAD~1。HEAD~1表示当前提交的父提交,也就是退一次。如果崩坏提交是最近一次提交,退到HEAD~1可能正好回到备份。但如果崩坏修改还没提交,git reset --hard HEAD才是回到最近一次提交,git checkout -- .也能丢掉工作区改动。命令不同,丢的东西不同,所以先把git status和git log --oneline的输出留全。
1.2 把 git log --oneline 输出交给 Codex,但执行权留在本地
Codex 适合做“读历史、给建议”,不适合拿执行权。你可以这样问它:
下面是
git status --short和git log --oneline -n 20的输出。请判断哪一个提交最像“修改前备份”,如果我要丢掉最近一次崩坏提交,应该用git reset --hard HEAD~1还是git reset --hard <哈希>?只给命令、影响和风险,不要执行任何命令。
它返回的是一段建议,你复制到本地终端执行。这样做的好处是:Codex 能帮你把哈希、提交信息、脏文件对应起来,但不会直接连你的生产库、生产机器,也不会替你敲git reset --hard。涉及 SQL、编译、注册组件这类操作,也应该由你在本地或对应客户端执行,再把报错贴回对话。
如果 Codex 通道没配,对话可能连这条分析都发不出去。所以下一步不是继续让它改项目,而是先把~/.codex/config.toml里的model_provider和base_url配好。
2. 让 Codex 读懂提交历史:~/.codex/config.toml 里把 Base URL 填到 TaoToken
2.1 去官网创建 Key,并抄下模型 ID
打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end ,注册后进入控制台创建 API Key。Key 只显示一次或可复制一次,拿到后先放到安全的地方,不要写进项目里的.env后顺手git add .。本文所有示例都用占位符YOUR_API_KEY,你替换成刚创建的 Key 即可。
接着在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的模型广场确认可用模型 ID。Codex 的model字段填什么,以模型广场当时列表为准,不要照着旧文章抄日期后缀,也不要自己编一个gpt-5-xxx。不同账号、不同时间看到的模型列表可能不同,配置前看一眼最稳。
这里的入口关系要分清:注册、创建 Key、看模型广场、看用量,走 TaoToken ;真正填进 Codex 的 Base URL 是https://taotoken.net/api,末尾不要加/v1,也不要在这条地址后面拼 UTM 参数。官网链接和接口地址混用,是后面 404 的常见来源。
2.2 config.toml 的 model_provider / base_url 怎么写
Codex 的用户级配置一般在~/.codex/config.toml。Windows 下通常是C:\Users\你的用户名\.codex\config.toml。没有这个目录就手动创建。写法按下面这份改,模型 ID 和 Key 不要照抄:
model = "YOUR_MODEL_ID" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "chat"model_provider = "taotoken"和[model_providers.taotoken]这一段是让 Codex 知道有新供应商。base_url只写https://taotoken.net/api,不要写成官网落地页,也不要加/v1。env_key表示 Codex 从哪个环境变量读 Key,下面把环境变量设成你的 Key。
Linux 或 macOS 终端里可以这样设:
export TAOTOKEN_API_KEY=YOUR_API_KEYWindows PowerShell 可以这样设,然后重开终端:
setx TAOTOKEN_API_KEY "YOUR_API_KEY"如果只在当前 PowerShell 会话里测试,也可以:
$env:TAOTOKEN_API_KEY="YOUR_API_KEY"注意YOUR_API_KEY是占位符,实际值从 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建。不要把 Key 提交到 Git,也不要把config.toml推到公开仓库。
2.3 改完先确认 Codex 读的是哪份配置
配置保存后不要马上让 Codex 大改项目。先开一个新终端,确认环境变量存在:
echo $TAOTOKEN_API_KEYWindows PowerShell:
echo $env:TAOTOKEN_API_KEY能打印出你的 Key,说明环境变量生效。然后启动 Codex,发一条不碰文件的测试消息。比如“只回复 ok,不要读取或修改任何文件”。如果连这条都失败,先查 Key、模型 ID、base_url,不要进入改代码阶段。
还有一点:如果你之前配过别的model_provider,确认当前配置里model_provider指向的是taotoken。多个供应商写在一起不冲突,但当前选中项要明确。配置文件里可以有多个[model_providers.xxx],Codex 用model_provider决定这次走哪个。
3. 配通后按常用 Git 工作流走:先 commit 备份,再让 Codex 改
3.1 日常四连:git status、git add .、git commit、git push
通道通了,不代表可以让 Codex 直接改。按常用 Git 工作流,改之前先走一遍:
git status git add . git commit -m "修改前备份" git pushgit status先看当前分支和文件状态。git add .把当前改动暂存,git commit -m "修改前备份"留一个明确回退点。git push把这个提交推到远端,多一份保险。这里的关键是提交信息要能认出来,别写update、fix这种过两天自己都看不懂的内容。
如果项目里有.env、密钥文件、本地数据库配置,先确认.gitignore有没有盖住。API Key 只放在环境变量或 Codex 配置里,不要塞进业务代码。你从 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建的 Key 是调用凭证,泄露后要去控制台删掉重建,所以git status里看到敏感文件时,先处理再提交。
3.2 让 Codex 生成修改,不把执行权交出去
备份提交完成后,再让 Codex 改项目。对话里说清楚边界:先列改动计划,再给代码或 patch;涉及数据库只生成 SQL,涉及编译只给命令,执行由你本地做。比如:
先不要改文件,列出你准备修改的文件和原因。确认后只输出 patch。涉及 SQL 只生成语句,我会在本地 SQL*Plus 执行。
这样即使它改崩,你还有“修改前备份”这个提交。Codex 可以读代码、解释报错、对照提交历史,但不能直连你的生产库、生产机器去执行诊断 SQL,也不能替你跑git reset --hard。把执行权留在本地,排障链路才不会断。
3.3 崩了以后把 git log --oneline 贴回对话
如果 Codex 改完发现不对,先停。运行:
git status --short git log --oneline -n 20把输出贴回 Codex,让它判断回退点。常见情况有两种:崩坏修改还没提交,工作区脏;崩坏修改已经被提交,git log顶部多了一条新提交。前者可以本地执行git reset --hard HEAD回到最近提交,或者git checkout -- .丢弃工作区改动;后者要看“修改前备份”的哈希,执行git reset --hard <修改前备份的哈希>,或者在确认最近一次提交就是崩坏提交时用git reset --hard HEAD~1。
原文里常提的git reset --hard HEAD~1是一种退一次的做法,但它不是万能钥匙。你让 Codex 读git log --oneline,就是为了避免退错。最终命令仍然由你在本地终端敲,敲之前确认没有未提交的重要改动,因为--hard会直接丢掉工作区和暂存区内容。
4. 验证与排障:Codex 里的测试请求、401 和模型 ID 对不上
4.1 先在 Codex 发一条不改文件的验证请求
配置好~/.codex/config.toml后,先发一条简单请求验证通道。可以问:“git reset --hard HEAD~1和git reset --hard <commit>有什么区别?只解释,不要执行。”如果 Codex 正常返回,说明 Key、Base URL、模型 ID 基本对上了。然后再去 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的控制台看这次调用有没有记上用量,这样能排除“看起来返回了,其实走了旧配置”的情况。
验证通过后,再回到仓库做git add .和git commit -m "修改前备份"。顺序不要反:先让 Codex 改项目,再发现通道没配,等于白改一轮。先验证通道,再备份,再让 Codex 动手,崩了才有历史可退。
4.2 base_url、模型 ID、Key 三个点对照
配置阶段出错,基本绕不开下面几个现象。对照时只看自己遇到的,不要一次全改。
| 现象 | 先看哪里 | 正确写法或动作 |
|---|---|---|
| 401 或未授权 | TAOTOKEN_API_KEY是否生效,env_key名称是否一致 | 环境变量值是YOUR_API_KEY替换后的真实 Key,Key 从 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建 |
| 模型不存在或 model not found | model = "YOUR_MODEL_ID"是否抄错 | 以模型广场当时列表为准,不要编造日期后缀 |
| 404 或接口路径不对 | base_url是否写成了官网或多了/v1 | 填https://taotoken.net/api,末尾不要/v1 |
改完配置后,重开终端再启动 Codex。环境变量和配置文件都有缓存可能,旧终端里改一半最容易误判。排障时把 Codex 的报错原文、config.toml里去掉 Key 的片段、模型 ID 一起贴回对话,让它帮你对照,但不要贴完整 Key。
4.3 回退命令仍由本地终端执行
git reset --hard HEAD~1会退到当前提交的父提交,git reset --hard <哈希>会退到你指定的提交。前者适合“最近一次提交就是崩坏提交”,后者适合你已经从git log --oneline里找到了“修改前备份”的哈希。执行前先git status,确认没有不能丢的未提交改动。
如果真退错了,git reflog还能看到 HEAD 移动记录,可以再找回旧提交。这个命令也在本地执行。Codex 可以帮你读git reflog输出、判断哪个记录对应哪次操作,但它不应该直接执行回退。排障过程里,模型负责解释,终端负责执行,职责分清以后,git reset --hard才不至于变成二次事故。
5. 跑通之后去控制台对一下这次 Codex 调用
5.1 看用量、换模型、重新建 Key
Codex 能正常返回后,去 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的控制台看用量记录。确认这次测试请求有没有被记上,模型 ID 是不是你配置的那个。如果后面想换模型,先在模型广场看可用列表,再把~/.codex/config.toml里的model改成新的YOUR_MODEL_ID,重开终端和 Codex。Key 如果泄露或换账号,也在控制台删除旧 Key,重新创建。
长期用 Codex 改项目,建议把“验证通道”和“备份提交”固定成仪式:新会话开始先发一条不改文件的请求,确认返回;动项目之前先git status、git add .、git commit -m "修改前备份"。这样即使 Codex 改崩,你也能用git log --oneline找到备份点,把输出交给 Codex 判断回退命令,最终在本地执行。
5.2 下一步:把测试、套餐和 Key 分开处理
先在 模型对话 里用同一把 Key 发一条测试消息,确认模型 ID 和 Base URL 没填错。如果要长期写代码,可以打开 Coding Plan 看套餐是否够用;新 Key 在 控制台 API Keys 创建。配置仍然记住两条:官网用于注册、看模型、看用量;填进 Codex 的 Base URL 只用https://taotoken.net/api,末尾不要加/v1。
回到仓库后,先git status看脏文件,再git log --oneline找“修改前备份”,然后把历史贴给 Codex 帮判断该退到哪次。命令最后由你在本地敲,git reset --hard HEAD~1还是git reset --hard <哈希>,让提交历史决定,不要凭感觉。