ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Codex回退对话不回退文件?用检查点快照方案轻松解围

Codex回退对话不回退文件?用检查点快照方案轻松解围 如果你天天在用 Codex 写代码一定遇到过这个让人抓狂的场景:你让它改一个功能,改到一半发现方向不对,于是输入回退,让它回到上一轮对话。结果对话确实回退了,模型也忘记了后面的修改,但你磁盘上的代码文件还是被改得乱七八糟——那只被 Codex 动过的手,并没有跟着对话一起回到过去。这个问题的本质在于:Codex 的对话历史和文件系统状态,是两套完全独立的记录。而当你试图用 git 来解决这个问题时,又会踩进另一个深坑——因为 git 的工作方式,跟 Codex 的自动操作逻辑,天生就合不来。这篇文章我就想跟你聊聊这个具体的问题:Codex 只回退对话、不回退文件时,我摸索出来的一个不碰 git 的补法,以及为什么先建个 git 仓库来兜底这条路,其实并没有想象中那么好走。1. 问题到底出在哪里:Codex 的记忆和你的文件是脱节的1.1 Codex 回退对话时,究竟回退了什么先说清楚 Codex 的对话回退机制。当你按快捷键或输入指令让对话回到上一条时,真正发生的变化是:上下文窗口里的消息历史被截断了。也就是说,Codex 在后续生成回复时,不再能看到那些被裁剪掉的对话内容。它就像一个失忆的助手,你把后面几句话删了,它就忘了自己刚才说过什么。问题恰恰出在这里:语言模型的能力来自于上下文,而你对代码文件的实际改动,是模型在每一轮生成代码时,直接通过工具调用写入磁盘的。这些写入动作一旦发生,就会真实地落在文件系统里。对话回退只是让模型忘记它做过这些写入,但文件已经被改了的事实,并不会因为记忆被抹掉而自动还原。我用一个生活化的类比来解释:你让一个实习生去改一份合同,他改了第三页和第五页。你突然说算了,回到第二步重来,实习生确实忘掉了第五页改了什么,但他留在第三页上的笔迹,不会因为你的一句话就自动消失。Codex 就是那个实习生,而你的工作目录就是那份合同。1.2 为什么 Codex 不自动帮你还原文件很多人的第一反应是质问Codex 为什么不设计成回退对话时也回退文件。这个问题的答案,要从 Codex 的工作机制里找。Codex 本质上是一个基于命令行交互的编码代理,它的核心设计原则是以对话为主,以文件操作为辅。从工程实现的角度看,要让对话回退自动触达文件系统,需要设计一套完整的快照对比-差异计算-反向应用机制。这在技术上不是做不到,但会引入一个很大的不确定因素:并非所有文件改动都来自 Codex。你在对话间隙手动改了代码,如果 Codex 顺手把这些手动改动也还原了,那将是一场灾难。做过编辑器插件开发的朋友应该明白,自动还原功能最怕的就是范围失控。VSCode 的本地历史、JetBrains 的 Local History,它们之所以只记录编辑器内部的文件状态,就是因为无法安全地感知外部工具对文件的修改。Codex 的情形类似——它跟你共用同一个文件系统,即使它有快照能力,也无法分辨磁盘上哪些改动是它写的、哪些是你手动写的。所以,与其说这是 Codex 的缺陷,不如说这是自动编码工具在设计上的一个安全边界:对话可以随便回退,但文件改动必须谨慎对待。想通这一点,你才能真正接受并解决这个问题,而不是一直抱怨。1.3 这类问题最伤的是什么场景在实际使用中,回退不同步的问题会对工作流造成严重干扰。最痛的一种场景是长会话多步修改:你让 Codex 一口气优化了三个模块,改了几十个文件,然后觉得第三个模块的方案不对劲,想回到第三个模块开始前的状态。这时候你发现,Codex 只回退了对话,它不再记得第三个模块的改动逻辑了——但你磁盘上那几十个文件的改动都还在。你无法让 Codex 帮你撤销,因为它已经忘掉了细节;你也没法手动逐个文件还原,因为改动太多太杂。还有一个高频场景是参考型回退:你让 Codex 生成了一段新代码,想看看效果,然后又让它改回原来的写法。对话里 Codex 确实会尝试去改回去,但如果原代码相当复杂,它往往会凭记忆重构,而记忆恰恰是不可靠的。最终产出的代码,看似与原来相似,实则早已面目全非。所以,这类问题的核心矛盾就是:对话可以选择性遗忘,但文件只能全量变迁。想要安全地控制文件的回退,你需要一个不依赖模型记忆、独立于对话历史的文件状态记录机制。这也是我下面要讲的补法能成立的根基。2. 为什么不能建在 git 上:三个层面的硬伤2.1 语义错位:git 回退的是提交,不是对话也许你会想到:那我提前建一个 git 仓库,每次让 Codex 工作之前先 commit 一次,出问题就 git checkout 还原,不就行了吗?这个想法听起来顺理成章,但真正操作过的朋友应该已经发现了,它的运行逻辑跟 Codex 的工作方式是错位的。git 的核心语义是提交历史。你 commit 的每一次快照,代表的是你主动确认的一个稳定状态。而 Codex 的对话回退,针对的却是思维过程的重来。这两者之间并不是一一对应的。你设想的流程是一次对话对应一次 commit,听起来很美好,但 Codex 在现实中可能会连续调用十几次工具修改文件,然后才停下来等你输入,你根本无法在它每次停顿的间隙都手动 commit 一次。即使你用自动化脚本在每次对话轮次后自动 commit,也依然有语义冲突:对话回退并不等于代码回退,Codex 回退后,可能会沿着新的思路继续写,这时候新增的代码会基于已经被修改过的旧文件继续叠加,而不是基于commit 时的原始状态。你最终得到的是一个混杂了多条时间线改动的文件,git 的历史里会留下一大堆无意义的中间提交。2.2 git 的沉默状态问题:谁来做那个 commit还有一个更隐含的坑:git 并不会有任何魔法般地自动记录文件变化。它需要你显式地执行 add 和 commit,数据才会进入版本库。这就意味着,如果你想让 git 成为 Codex 的安全网,你必须解决谁来触发这个 commit的问题。有人可能会说那我用一个文件监听器,检测到目录变化就自动 commit。这个方案在技术上可行,但你会很快撞到另一个尴尬:Codex 的修改频率非常高,尤其是一次生成多轮工具调用时,文件可能在几秒内被反复修改。每改一次就 commit,会产生海量的提交记录,而且这些记录之间往往互相覆盖、没有意义。更重要的是,当 Codex 正在批量修改文件时,你可能正处于一个中间状态——比如新代码写到一半,旧代码已经被部分覆盖。这时候自动 commit 的快照,本身就是坏的。你回退到这个坏快照,反而把原本还有救的文件改坏了。Git 的原则是提交稳定的状态,但 Codex 的实时修改恰恰是时刻不稳定的,这两者的节奏完全合不上。2.3 即使勉强用了 git,恢复操作也会污染对话再退一步说,就算你完美地解决了自动 commit 的问题,还有一个对话层面的硬伤:git 的恢复操作是用命令执行的,而 Codex 并不知道你已经恢复了文件。举个真实场景:你让 Codex 改了 A 文件,回退对话后,你又手动执行 git checkout 把 A 文件还原了。这时候 Codex 的上下文里,依然保留着它刚刚修改过 A 文件的认知。你继续让它改 B 文件时,它可能会尝试读取 A 文件来理解上下文,结果发现 A 文件的内容跟自己的记忆不一致,于是它要么感到困惑生成错误的代码,要么无意识地再次改回它记忆中的样子。这就是我标题里说的不能建在 git 上的深层原因:git 负责的是代码的版本,但 Codex 需要的是与自己操作历史对齐的文件状态。两者一旦脱节,不只是文件回退功能失效,连正常的对话流都会被干扰。你相当于给自己造了一个文件内容与模型记忆完全脱轨的混乱现场,越补救越乱。3. 不碰 git 的补法:用检查点思维做文件状态快照3.1 核心思路:为每一次对话转折点建立文件快照既然 git 不合适,我们需要一个什么样的工具?我的答案是:一个极轻量的、可随时触发、可快速选择的文件快照机制。它的核心设计理念很简单:在每次你准备让 Codex 做一件可能无法轻易撤销的工作前,手动触发一次全量备份,把当前整个工作目录的所有文件复制到一个备份目录里。当 Codex 的对话回退后,你只需要对比快照目录和当前目录,找出差异,然后一键恢复即可。你可能会觉得这不就是手动 cp 吗?会不会太原始了?没错,它确实是一个很原始的想法,但正是因为原始,它才避开了 git 的语义错位问题。快照不与任何对话历史绑定,不产生任何提交记录,更不会影响 Codex 对文件状态的感知。它就是一个纯粹的、物理层面的文件状态保险。我给它起名叫检查点(Checkpoint)方案。每次干活前打一个检查点,干砸了就从检查点恢复。这个思路其实源自游戏存档机制——你还记得打游戏时那种打 boss 前手动存档的习惯吗?本质上是同一件事:在关键时刻保存当前状态,万一失败可以无限重来。3.2 具体实现:十分钟搭一个零依赖的快照脚本接下来动手实现。我的方案不依赖任何第三方工具,只用了 shell 脚本和最基本的系统命令,在所有类 Unix 环境和 Git Bash 下都能直接运行。先实现一个最简单的版本:# 保存为 snapshot.sh,放在你的项目根目录(或者任何你方便执行的地方) #!/bin/bash # 用法: ./snapshot.sh [自定义标签] TIMESTAMP$(date %Y%m%d_%H%M%S) LABEL${1:-manual} SNAPSHOT_DIR./.codex_snapshots/${LABEL}_${TIMESTAMP} mkdir -p $SNAPSHOT_DIR # 排除常见的不需要备份的目录 rsync -a --excludenode_modules --exclude.git --excludedist --excludebuild ./ $SNAPSHOT_DIR/ echo 快照已创建: $SNAPSHOT_DIR如果你没有 rsync,用 cp -r 也能达到目的,只是排除目录会麻烦一些:#!/bin/bash # 保存为 snapshot_cp.sh TIMESTAMP$(date %Y%m%d_%H%M%S) LABEL${1:-manual} SNAPSHOT_DIR./.codex_snapshots/${LABEL}_${TIMESTAMP} mkdir -p $SNAPSHOT_DIR # cp -r 排除目录需要借助 find 或者 tar,这里用 tar 管道实现 tar --exclude./node_modules --exclude./.git --exclude./dist --exclude./build -cf - . | tar -xf - -C $SNAPSHOT_DIR echo 快照已创建: $SNAPSHOT_DIR解释一下为什么选择 rsync 或 tar 而不是简单的 cp:Codex 的任务经常涉及大型依赖目录,比如 node_modules,每次全量拷贝这些目录非常耗时,而且它们的改动极少,备份完全没有意义。rsync 的 --exclude 和 tar 的 --exclude 可以帮你把这些目录直接过滤掉,让快照过程快到几乎无感。3.3 恢复操作:对比差异,精准还原快照有了,恢复逻辑也要配套。我的恢复脚本长这样:# 保存为 restore.sh #!/bin/bash # 用法: ./restore.sh 快照目录路径 if [ -z $1 ]; then echo 请指定要恢复的快照目录 ls -lt ./.codex_snapshots/ | head -5 exit 1 fi SNAPSHOT_PATH$1 # 先列出差异,看看会改哪些文件 echo 以下文件将被还原: diff -rq $SNAPSHOT_PATH . --exclude.codex_snapshots --excludenode_modules --exclude.git 2/dev/null || true echo read -p 确认执行恢复? (y/n) -n 1 -r echo if [[ $REPLY ~ ^[Yy]$ ]]; then rsync -a --delete $SNAPSHOT_PATH/ ./ echo 恢复完成 fi这里最关键的是 rsync 的 --delete 参数。它意味着:以快照目录为准,把当前目录下所有在快照里不存在的文件全部删除,把快照里存在的文件全部覆盖回去。这样就能真正做到完整还原到快照时刻,而不是只覆盖部分文件。实际使用时的操作流程是:开始任务前执行 ./snapshot.sh write_api_integration让 Codex 开始干活干到一半发现方向不对,让 Codex 回退对话执行 ./restore.sh ./.codex_snapshots/write_api_integration_20250321_153000/确认 diff 列表没问题,输入 y 回车干净地回到任务之前的状态这套流程跟 git 的 checkout 恢复不同,它不会产生任何提交历史记录,也不会让 Codex 的上下文产生文件被外部改动的感知冲突。对话和文件,严格各管各的。3.4 为什么这套方案能成立:对话与文件的彻底解耦你可能会问,快照方案和 git 方案看起来差不多呀,为什么前者就能建,后者就不能建?区别在于哲学层面的彻底解耦。git 方案试图让版本控制参与到对话流转里,它天然假设一次对话一次提交一次可回退的文件状态。但 Codex 的实际工作方式是连续的、流式的,对话没有明确的提交边界,你不可能要求 Codex 在每个对话轮次都像人一样整理一次代码然后提交。快照方案则完全绕开了这个假设。它不关心对话的轮次,不关心代码的状态是否稳定,它的唯一职责就是在某个时刻,忠实记录全部文件内容。你打了一个检查点,后面无论 Codex 怎么折腾,你随时能回退到检查点那一刻的文件状态。它不参与对话,不产生历史,不影响模型感知,自然也就不会跟 Codex 产生任何冲突。用一句话概括就是:git 解决的是代码版本管理问题,而我们要解决的是Codex 任务执行的安全网问题。后者可以让前者来实现,但前者被设计出来时,并没有考虑 LLM 代理这种连续流式操作文件的使用方式,硬用就是削足适履。4. 从手动到半自动:给快照方案加上自动触发能力4.1 监听文件修改,自动打检查点手动打快照已经很可靠了,但有些场景下你会忘记。比如 Codex 突然来了一段非常精彩的自动化修改,你根本没来得及提前执行 snapshot.sh,它就已经把文件改完了。所以我把方案升级到了半自动:增加一个简单的文件监听循环,检测到工作目录里有代码文件被修改时,自动触发一次快照。这样,即使你忘了手动打点,系统也会在 Codex 刚动手时替你完成备份。写一个最简版本的监听脚本:# 保存为 watcher.sh #!/bin/bash # 依赖: fswatch(可从 brew 安装) 或者 inotifywait(Linux 自带) # 用法: ./watcher.sh WATCH_DIR. EXCLUDE_DIRS(node_modules .git dist build .codex_snapshots) build_fswatch_args() { local args() for dir in ${EXCLUDE_DIRS[]}; do args(--exclude$dir) done echo ${args[]} } fswatch -r -l 2 $(build_fswatch_args) $WATCH_DIR | while read changed_file; do echo 检测到文件变化: $changed_file # 等 5 秒,防止 Codex 连续写入时打过多快照 sleep 5 ./snapshot.sh auto done这个脚本的核心策略是延迟 限频。Codex 在一个任务周期内经常会连续写入多个文件,如果每检测到一个变化就立刻打快照,几分钟内可能产生几十个快照,反而让快照列表变得难以选择。加一个短暂延迟,可以让多次连续修改被合并到同一个快照里。4.2 保留窗口与周期清理:避免快照目录爆炸有了自动快照,一个现实的问题马上浮现:快照会越积越多,很快磁盘就被占满了。所以你必须给快照目录加上保留策略。我的做法是保留最近 N 个快照,而不是全部保留。这个 N 跟你项目的活跃程度有关,我个人的经验值是 20 个左右——这足以覆盖你实际工作中往回走三五步的典型场景,又不会让磁盘不堪重负。清理逻辑可以很简单:# 保存为 cleanup.sh #!/bin/bash # 用法: ./cleanup.sh [保留数量],默认保留 20 个 KEEP${1:-20} cd ./.codex_snapshots || exit 1 # 按名称排序,名称自带时间戳,天然有序 ls -1d */ | sort -r | tail -n $((KEEP1)) | xargs rm -rf这里用了一个小技巧:快照目录名带着 YYYYmmdd_HHMMSS 的时间戳,所以 ls 的字典序就是时间序。排序后保留前 20 个,后面的全部删除。把这个脚本挂到 cron 或者放进 watcher 的每次循环里,就能做到全自动维护。4.3 实测效果:从手忙脚乱到三秒回到安全点这套方案我用在实际项目里已经跑了几个月,给你分享几个真实的使用片段。第一个场景是重构一个 Python 数据处理模块。当时我让 Codex 把整个模块从读取 CSV 后手动清洗改成用 pandas 管道处理。改到一半,我发现它把原始数据的列名推断搞错了,整个下游逻辑全部会出错。我让 Codex 回退对话,然后执行 restore.sh 恢复了快照,整个过程不超过五秒,文件就干净地回到了重构前的状态。接着我重新描述了需求,这次在提示词里加上了列名映射的详细说明,一次就通过了。第二个场景是一次前端切图任务,Codex 在改一个 React 组件的样式时,连续改出了三个版本,每个版本互有优劣,但混在一起形成了一堆脏改动。我本想用 git stash 暂存一下手动挑拣,但打开编辑器看到那十几个文件的历史状态后直接放弃了。最后是靠逐个快照对比 diff,挑选出最佳版本的快照恢复,然后手动微调完成的。那个时刻我非常庆幸自己用的是快照而非 git——快照之间的 diff 是纯文件层面的,干净利落,没有任何提交信息的干扰。这套方案的实测体验总结下来就是:它让 Codex 的回退对话补齐了缺失的最后一块拼图——磁盘状态的安全回退。对话用来重来思路,快照用来重来文件,各司其职,互不干扰。5. 升级思路:把快照变成对话-操作日志的附件5.1 记录 Codex 的操作日志,让快照更智能现在已经能安全回退文件了,但还有一个体验上的小遗憾:当你面对十几个自动快照时,光靠时间戳和手动标签,很难快速判断哪个快照是这次任务开始前打的。所以我又给方案加了一个记录层——每次创建快照时,顺便把当前 Codex 的对话摘要存成一个文本文件放进快照目录。这样你在选择恢复点时,可以先看一眼日志,再决定恢复哪个快照。实现思路是在 snapshot.sh 里追加一个参数:#!/bin/bash TIMESTAMP$(date %Y%m%d_%H%M%S) LABEL${1:-manual} NOTE${2:-} SNAPSHOT_DIR./.codex_snapshots/${LABEL}_${TIMESTAMP} mkdir -p $SNAPSHOT_DIR if [ -n $NOTE ]; then echo $NOTE $SNAPSHOT_DIR/.snapshot_note.txt fi rsync -a --excludenode_modules --exclude.git --excludedist --excludebuild --exclude.codex_snapshots ./ $SNAPSHOT_DIR/ echo 快照已创建: $SNAPSHOT_DIR echo 备注: ${NOTE:-无}你可能觉得这个功能很鸡肋,但真正用起来会发现它非常救命。有一次我在同一个项目上并行推进两个任务,没有及时打新的快照,跑去恢复时只能凭时间猜。后来在快照里加了备注,执行 restore.sh 前先 cat 一下备注文件,整个选择过程从盲猜变成了精确查找,在一次手忙脚乱的修复中至少省下了一小时。5.2 与 Codex 的对话历史联动:手动打草稿,自动存快照关于快照与 Codex 的联动,我还有一个小建议:你在让 Codex 开始一项高风险操作之前,可以把即将进行的操作内容写在备注里,然后让快照脚本在对话正式启动前自动执行一次。手动触发的方式很简单:先写好接下来的任务描述,然后执行 ./snapshot.sh add_sso_login 准备让 Codex 实现 SSO 登录流程,再启动 Codex。快照备注里记录的是你作为人的意图,而 Codex 的对话历史记录的是它作为模型的执行过程,两者叠加起来,就形成了一份非常完整的工作日志。很多人觉得这种记录方式是运营自己的项目,有点过度工程化。但我的体会是,当你真正驾驭好一个 AI 编码代理时,最核心的能力不是提示词技巧,而是对现场状态的可观测性和可恢复性。人类程序员在大型项目里靠的是版本控制、任务管理和测试套件,AI 编码时代,你的安全网也要跟上。5.3 一个进阶玩法:把快照方案嵌入团队协作流程最后给你一个团队协作场景的进阶玩法。如果你的团队也在多个成员共享的开发环境里使用 Codex,快照方案还可以充当一个轻量级的现场状态标记。具体做法是:在共享开发服务器的项目根目录下,建立 .codex_snapshots_shared 目录,每次你打完快照后,执行一下 git add 和 git commit 去提交这个目录(注意,是提交快照目录本身,而不是提交项目代码)。这样团队成员就能通过查看共享仓库的快照提交记录,知道你每次让 Codex 干活前,项目处于什么状态。我之所以强调提交快照目录而不是直接用 git 管理项目代码,原因还是那四个字:语义隔离。快照目录是纯文件级别的死数据,提交它不会产生任何代码合并的冲突,不会影响任何人的工作分支。而项目代码则保持由 Codex 自由操作,不被 git 的提交历史束缚。团队的其他成员也可以根据自己的需要,随时从共享仓库拉取你发布的任意快照来观察某个阶段的真实文件状态。6. 常见问题速查与避坑经验6.1 快照目录占空间太大怎么处理快照频繁创建后,磁盘占用是会快速增长。除了前面提到的保留数量策略,还有一个很容易被忽略的地方:rsync 默认会复制所有文件,包括一些临时文件和大文件。建议在 rsync 命令里加上更多排除规则:rsync -a \ --excludenode_modules \ --exclude.git \ --excludedist \ --excludebuild \ --exclude.next \ --exclude*.log \ --exclude*.tmp \ --exclude*.cache \ --exclude.DS_Store \ ./ $SNAPSHOT_DIR/如果是大型项目,还可以考虑在快照时排除掉体积大且没有版本价值的目录,比如 .venv、vendor 等。6.2 恢复了快照之后 Codex 变得混乱怎么办这个问题我提到过,但值得再强调一遍:快照方案的优点就是它不改变 Codex 上下文的任何内容。但如果你确实遇到了Codex 对文件的理解与磁盘状态不一致导致的混乱,通常是因为你没有回退对话,只是恢复了文件,导致 Codex 的记忆里还装着旧文件。解决办法很简单:先让 Codex 回退对话,再恢复快照文件。顺序不能反,一定要先回退对话,后恢复文件。这样 Codex 的记忆和磁盘状态就能大致对齐到同一个时间点附近。如果你的项目里已经积累了很多对话,不方便直接回退到最后一次操作之前,你可以手动告诉 Codex刚才的修改我已经全部还原了,请基于当前磁盘上的实际文件继续工作,通常 Codex 会重新读取文件,刷新自己的上下文理解。6.3 为什么我强烈不建议用 git aliases 或者 git hooks 来做这件事有些朋友会用 git hooks 在 commit 前自动备份,或者用 git alias 快速执行add commit checkout组合。我的态度是:可以试试,但不要依赖它。原因是 git hooks 的执行时机往往是围绕 commit 操作设计的,而你并不会在 Codex 每次修改文件后都手动 commit。即使通过 hook 在每次文件变化后自动 commit,你也会遇到 2.2 节说的沉默状态问题——Codex 的飞刀式修改产生的提交记录,大概率是残缺不全的中间态,恢复起来没有实际意义。快照方案跟这些机制最大的区别,在于它把记录和提交拆开了。快照只做物理层面的复制,不做逻辑层面的判断。它从来不会问自己这个状态是否值得记录,因为它的回答永远是全部值得。这种无差别全量记录的哲学,恰恰是 AI 编码时代最需要的安全底座——你永远不知道 Codex 什么时候会脑洞大开,但你随时可以踩下刹车,回到自认为安全的那个检查点。7. 写在最后的个人体会这段时间深度使用 Codex 之后,我最大的感悟是:跟 AI 结对编程,真正重要的不是让 AI 更聪明,而是让你自己更从容。聪明的事情,Codex 已经在做了;而从容这件事,需要你自己搭建一套可靠的安全网。我的这套检查点快照方案,看似极其朴素,但它解决了我在实际工作中遇到的最痛的问题:Codex 改了文件,但它自己忘了;对话回退了,文件却不回退。而 git 作为传统版本控制的王者,在这种连续流式文件操作的 AI 代理场景下,反而显得笨重——它的提交语义、历史模型、心智负担,都不适合用来给 Codex 做回退保险。我现在的工作习惯是:每天开工前,先执行一次 ./snapshot.sh daily_start 作为当日基线;每次让 Codex 接手一个重要任务前,再补一次带备注的快照;偶尔忘了,还有 watcher 脚本自动兜底。整个过程几乎无感,却让我在无数次改崩了的瞬间,都能在三秒钟内回到安全状态。如果你也正在被 Codex 的只回退对话不回退文件折磨着,不妨试试这套不碰 git 的方案。它不需要你安装任何新工具,不需要你改变 Codex 的任何配置,只需要一个脚本、一个习惯,以及一种先把安全网搭好再让 AI 上前线的思维方式。最后再分享一个小技巧:别等到出了大问题才想起快照,把它变成每次跟 Codex 开始新任务的肌肉记忆。AI 编码工具越强大,你越需要一个清晰的和它并肩作战的边界——你负责方向和安全,它负责执行和速度,而快照,就是你手中最有力的那根安全绳。
返回列表