智能体是真的在改文件,有时候还会改错地方。不是坏掉了 - 只是它对任务的理解和您想的不一样。好消息是,代码快照由 Claude Code 自己拍,不用您动手,失败的尝试按几下就能退回去。

坏消息是,这些快照是有边界的。智能体写进文件里的每一笔改动,都发生在受保护的范围之内,从那里都能救回来。凡是绕过这个范围的,就在圈外:快照没见过,也就救不回来。圈画在哪里,最好提前弄清楚,别等到东西不见了才发现。

下面就来看:回退是怎么运作的、圈画在哪里、能保留多久,以及圈外的东西该靠什么来补。

什么是 checkpoint

Checkpoint 是智能体准备要改的那些文件,在它动手之前拍下的快照。它不是项目的备份,也不是版本历史里的一条记录,而是当前会话内的一个工作用还原点,也就是您和智能体这段对话里的还原点。

这一节最值得记住的一点是:快照会在您每次发消息前自动生成。您不用创建它,不用配置它,也不会忘记按什么键。消息一发出,这个点就已经存在了。

  • 您的消息
  • 代码快照
  • 智能体的修改
  • 新消息
  • 新快照

请留意顺序:先有快照,才有修改。正因如此,回到某个点的意思就是"把代码还原成这条消息之前的样子"。您选的不是某个时间点,而是自己发出的某一条具体消息,之后的一切都要被撤销。

再补充一点,让后面更好理解。Checkpoint 针对的是代码。Claude Code 也能把对话倒回去,但那是菜单里另一个独立的选项:代码和对话一起回退,还是分开回退,由您决定。

怎么打开回退菜单

入口有两个,做的是同一件事:

  • 在输入框里打 /rewind 命令。它还有常见的别名 /undo 和 /checkpoint;
  • 输入框为空时按 Esc Esc 键。
菜单没打开的话

多半是输入框里还有文字。这种情况下,第一次按 Esc Esc 只会清掉打好的字,菜单不会出现。文字并不会消失:它会进入输入历史,按向上键就能把它调出来。等输入框空了之后再按一次 Esc Esc,菜单就会打开。

打开的是这个会话里您发过的消息列表。不是文件列表,也不是时间轴 - 就是消息,您发的每一条都有一行。您要选的是"从哪一条之后,事情开始走偏了"。

还有个特殊情况:如果您在同一个还在运行的智能体里,之前用过 /clear,较新的版本会在列表最上面多出一行。选它能回到清空之前的那段对话。可见,清空并不会把什么烧掉。

菜单提供哪些选项

选好点之后,智能体会问您具体要拿它怎么办。一共六个选项:

菜单项目作用
Restore code and conversation把代码和对话一起还原到选定的点
Restore conversation只还原对话,文件维持原样
Restore code只还原文件,对话维持原样
Summarize from here把这个点之后的对话收拢成摘要
Summarize up to here把到这个点为止的对话收拢成摘要,之后的部分维持原样
Never mind什么都不做,直接关掉菜单

关于这张表,第一件该知道的事是:菜单的内容会变。跟代码有关的两个选项,只有在选定的点之后智能体真的改过文件时才会出现。没改过就没东西可还原,那几行自然不会出现。所以就算菜单里只有四项而不是六项,您用的还是同一套程序。

Summarize 这两行比较特别。它们处理的不是代码,而是对话的长度:把一段对话收拢成简短的摘要,原则上碰不到磁盘上的文件。这么做的用处是另一个很大的话题,这里只要知道它不是回退,也不能用这种方式救回代码就够了。

还有个省心的小细节。还原对话之后,那条消息的内容会回到输入框里。不用回想自己写了什么再重打一遍,调整一下措辞就能再发一次。

回退救得回什么,救不回什么

在自己的范围里,回退很可靠。它能救回两样东西:智能体用自己的编辑工具做出的文件修改,以及这个会话里的对话历史。

而留在圈外的是这些。

  • 终端命令造成的改动。智能体不只会改文件,也会执行命令。如果文件是被 rm 命令删掉、被移动,或是被复制覆盖掉的,快照根本没见过这件事,自然救不回来。
  • 绕过智能体发生的改动。智能体在这个会话里没碰过的文件,回退完全不会去动:您自己在编辑器里改过、被别的程序覆写过、旁边还有另一个会话在动它 - 这些都会维持原样,通过菜单既救不回也撤不掉。但如果您手动改过的文件,智能体也编辑过,还原代码会把这个文件连同您的修改一起,退回快照时的样子。
  • subagent 做的修改。如果智能体把一部分工作交给了辅助的 subagent,这些修改通常不会进入快照,回退也救不回来。它们要通过 git 来撤销。
  • 符号链接这种少见情况。这类文件回退会直接跳过,并老老实实地用单独一行写清楚。真遇到了再处理就好,不用提前准备。
改文件和跑终端命令,是两回事

从外面看,两者的差别几乎看不出来。不管是编辑了文件,还是执行了删文件的命令,智能体汇报的口气一样平静。对您来说,屏幕上是两条长得很像的消息;但对回退来说,这是本质上不同的两件事 - 前者救得回来,后者救不回来。

所以要求执行删除、移动或覆写的命令,值得比一般的修改请求读得更仔细一点。那正是背后的安全网已经不在的时刻。

简单说就是:回退盯的是智能体写进文件里的内容,不是电脑上发生的所有事情。

回退能保留多久

快照不会无限累积。菜单里的点会全部列出来,但文件快照只保留最近一百个:对一段对话来说已经很够用,但不是无限,旧的会渐渐被挤掉。

不过这些点不绑定在打开的终端窗口上。它们跟着会话一起保存,所以您可以关掉终端、隔天再回来、接着同一段对话 - 回退菜单照样能用,就像什么都没发生过一样。

当然也不会永远留着。会话和它的快照大约一个月后就会自动清掉,这个期限想改的话也能自行设置。

由此得出一个简单的结论:回退适合单个任务的时间范围 - 几分钟、几小时、和智能体的一段对话。它不是用来存项目历史的仓库,这不是缺点,只是分工不同。要覆盖更长时间的方法,接下来再谈。

四种保险,各有各的分工

撤销、快照、文件夹副本和版本历史,不是同一件事的四种说法。它们覆盖的时间长短不一样,能防的损失类型也不一样。

保险谁创建保存什么能保留多久哪里无力
编辑器里的撤销您,按一下打开的文件里您最近的修改不长,看编辑器而定同时涉及好几个文件的修改,通常也包括绕过编辑器直接写进磁盘的内容
CheckpointClaude Code,自动您每次发消息之前的代码跟着会话,一百个点终端命令、绕过智能体发生的改动
文件夹副本您,手动复制那一刻的整个项目不删就一直在看不出改了什么,还会把磁盘塞满
版本历史,git您,有意识的操作项目的一个个状态,依次排列跟着项目一起存在您没来得及记录进去的部分

选保险,先看覆盖范围,再看能保留多久。如果 Claude 只用自己的编辑工具改普通文件,没碰到会话以外的东西,五分钟的实验用 checkpoint 就够了。如果工作里有终端命令或外部改动,不管时间多短,光靠 checkpoint 都不够。只有在覆盖范围合格的保险里,才轮到看时长:好几天的工作,或者重要的里程碑,需要不依赖和智能体对话的机制。

关于文件夹副本,话要说清楚。当作冒险操作前的一次性防护,它是管用的:复制一份,放手去改,出问题就换回去。但当成一套机制就撑不住了。一周后您会有好几个几乎一模一样的文件夹,哪个才是最新的,已经没人记得了。

表格最后一行,是唯一能同时做到长期保存状态、又能显示中间到底改了什么的方式。这就是 git,它本身是一个独立的大话题:有自己的工具、自己的一套命令,这里不深入展开。理解它在表里的位置就够了 - 时间跨度最长,也是回退照顾不到的地方唯一的防线。

这对工作方式有什么影响

重点不在按钮多不多。回退在实际工作里带来的是这些:

  • 快照自动生成,但几乎不用成本的,只有通过 Claude 自己的编辑工具改普通文件的实验。要是会用到终端命令或会话之外的改动,请先选别的保险;
  • 智能体不会替您决定要不要回退。它可以说自己走错方向了,但打开菜单、按下选择的人是您;
  • 要求执行终端命令,和要求修改文件,是不同类别的动作。前者回退救不了,后者救得了。差别只在请求的文字里能看出来,这也是为什么值得读仔细;
  • 步子迈得越大,回退的用处就越小。救是能救回来,但智能体做的事越多,光看一个菜单想弄清楚到底救回了什么就越难。小步前进在这里同样占优势;
  • 回退和版本历史不是竞争关系。前者覆盖一段对话里的几分钟、几小时,后者覆盖项目的几天、几周和里程碑。
大改动之前的一分钟

在真正有风险的操作之前,花一分钟用比会话更长寿的方式把状态固定下来,是值得的。现在您手上能用的是文件夹副本 - 当作冒险前的一次性防护,它老老实实能做到。

但真正该用的工具是 git。它能想存多久就存多久,还能显示中间到底改了什么,也不会用一堆几乎一样的文件夹把磁盘塞满。怎么用它,我们另外再讲:这个话题很大,值得单独聊一次。至于冒险前先停一分钟的习惯,不管有没有 git,现在都用得上。

回退菜单就留给它擅长的事,快速实验:当成最后一道防线用,效果明显不如当成日常工具来用。


回退菜单的内容和保留期限,会随 Claude Code 的版本和设置而不同,所以您看到的可能和这里描述的不一样。您的版本提供什么,菜单本身总会告诉您。