会话时光机:撤销与回退

这一篇给我们的 My Claude Code 工具补一个日常最实用的命令:/rewind,它的使用场景就是回退对话和代码。

比如你让 Agent 帮你加个功能,它给你改了一些文件之后,你突然改变想法了,或者发现它理解有些偏差,那这就需要回退代码,把刚才的改动撤销。

最简单的办法是利用 Git 工具,比如每次开始任务之前都新开一个 Git worktree,保持一个干净的 Git 工作区,每个小功能都做一次 Git commit,方便追踪代码改动。

但在 Agent 工作过程中,可能你会和他多轮对话,每轮对话都可能产生代码改动,如果每轮对话产生的改动都做一次 Git commit,会导致 Git 历史非常琐碎,反而失去了 Git 版本管理的关键能力。

所以实际情况中,一般把独立的功能开发、Bug fix 作为 Git commit 进行管理,Agent 多轮对话中的连续代码改动,由 Agent 工具自己提供撤销改动等功能。

Claude Code 的 /rewind 命令就是干这个用的。选中一条历史消息,它会问你要回退什么:只回退对话、只回退文件,还是两样一起退。

回退对话是简单的,前面 持久化聊天记录 已经介绍过了,对话历史就是一个消息列表,如果想回退到之前的某次对话,直接把消息列表截断就可以了。

回退文件会复杂一些,得在 Agent 干活的过程中就把改动过的文件记录下来,才能准确地恢复之前的文件内容。

所以下面先讲如何回退对话,再细说如何回退文件。