Mono
候补名单

如何撤销 AI 编程智能体所做的修改

安全地撤销 AI 编程智能体的修改:恢复单个文件、丢弃它留下的未提交改动,或还原它的提交,同时不丢失你自己的工作。

要撤销 AI 编程智能体的修改,先查看改了什么,再用对应的 Git 命令:修改过的文件用 git restore,新文件用 git clean,提交用 git revert。动手之前先用 git stash 保存一份安全副本。Claude Code 自带的 /rewind 也能恢复代码,但它不会记录每一处改动。

本文从你决定放弃这些工作之后讲起;如何审查 AI 编程改动可以帮你做出这个决定。Mono 会显示改了什么,但不会帮你撤销,所以在 Mono 里用的也是同样的命令。

1. 停下智能体,查看改了什么

首先,让智能体停下来。在 Mono 中,智能体工作时,发送按钮会变成取消按钮。在项目文件夹中打开终端,运行:

text
git status
git log --oneline -5

第一条命令列出修改、删除、已暂存和新建的文件。第二条显示最近的提交,包括智能体做的提交。记下哪些改动是你自己的:撤销命令不知道某一行是谁写的。

你看到的情况 如何撤销
已修改或已删除的文件,未暂存 git restore <path>
已暂存的改动 git restore --staged <path>,然后撤销文件中的修改
新建的未跟踪文件 git clean -n <path>,然后 git clean -f <path>
你不想要的提交 git revert <commit>

在 Mono 中,“显示变更”列出自上次提交以来修改过的文件和新文件,所以不会显示智能体已经做出的提交。

2. 先保存一份安全副本

restore 和 clean 命令会永久丢弃未提交的工作,所以先把所有内容保存下来:

text
git stash push --include-untracked -m "before undo"
git stash apply --index

第一条命令保存你修改过的文件和新文件,并清理工作区;第二条把它们放回原处,同时保留暂存状态。表面上什么都没变,但 git stash list 里现在多了一份名为“before undo”的副本。

如果撤销过头了,可以用 git restore --source "stash@{0}" <path> 从最新的 stash 中找回某个修改过的文件。

3. 撤销单个文件或其中一部分

选择影响范围最小的命令:

  • git restore <path> 丢弃该文件中未暂存的修改。
  • git restore --staged <path> 取消暂存,但保留文件中的修改。
  • git restore -p <path> 会逐个询问每一处改动(hunk),适合你和智能体修改了同一个文件的情况。
  • git clean -n <path> 列出 git clean -f <path> 会删除的未跟踪文件。一定要指定路径。

git restore 文档解释了每个选项。

4. 撤销智能体留下的所有未提交改动

如果这些改动都不是你的,可以在项目根目录运行 git restore --staged --worktree . 全部丢弃,再用 git clean -n . 和 git clean -f . 处理新文件。否则就按路径逐个处理。

举个虚构的例子:你让智能体在“tidy-recipes”项目中把 CSS 类 .btn-primary 重命名为 .button-main。在这之前,它已经提交过一次没人要求的锁文件更新。这一次,它在 3 个文件中改了类名,重新格式化了 12 个无关文件,还新建了 styles/tokens.css。与此同时,你手动编辑了 README.md,并且想保留这些修改。

保存安全副本后,恢复智能体改动的文件(这里是 src/ 和 styles/main.css),并删除它新建的文件:

text
git restore src/ styles/main.css
git clean -n styles/tokens.css
git clean -f styles/tokens.css

这里不要用 git restore .:它会把你对 README 的修改也一起丢掉。如果你在 src/ 里也有修改,就逐个写出智能体改动的文件。

现在 git status 只列出 README.md,git diff 也只显示你写的内容。那次锁文件提交仍然存在。

5. 撤销智能体已经做出的提交

git revert 会记录一个新提交,用来抵消之前的某个提交。根据 git revert 文档,它要求工作区是干净的,所以先把你对 README 的修改放到一边:

text
git stash push -m "readme" README.md
git revert <lockfile commit>
git stash pop

使用 git log 中的哈希值,加上 --no-edit 可以跳过提交信息编辑器。git stash pop 会恢复“readme”,并把“before undo”留在列表里。现在 git status 只列出 README.md,git log --oneline 最上面显示的是 Revert "Update lockfile"。

对于已经推送的提交,用 revert 比用 git reset 更稳妥,因为后者会改写别人可能已经拿到的历史。如果 reset 或 rebase 之后某个提交似乎不见了,git reflog 会列出你最近停留过的提交及其哈希值。

6. 使用智能体的检查点,以 Git 兜底

Claude Code 会在每次发出提示前保存一个检查点:运行 /rewind,或在输入框为空时连按两次 Esc,即可恢复代码、对话或两者。它的检查点文档列出了限制:shell 命令造成的改动不会被记录,外部编辑通常也不会被捕获,检查点也不能取代版本控制。能否使用这项功能,还取决于你在哪个应用里运行智能体。

所以要把 Git 作为后备:

  • 每个任务开始前先提交或新建分支,这样“上一次提交”就等于“智能体动手之前”。
  • 告诉智能体未经询问不要提交,例如写在你的 AGENTS.md 文件里。
  • 保持审批开启。Mono 的“YOLO模式”会接受智能体的所有请求,默认是关闭的。请看允许之前要检查什么。

在 Mono 中,项目卡片可以在你电脑上的项目文件夹里打开终端,在手机上也能这样做(见远程编程指南)。Mono 还没有正式推出,你可以加入候补名单。

作者

Reunified 打造能把分散的东西重新聚到一起的应用。

继续阅读

全部文章

阅读约需 6 分钟

如何为编程智能体编写 AGENTS.md 文件

写一份简短的 AGENTS.md,包含安装和测试命令、规则与边界,让 Claude Code 和 Gemini CLI 加载它,再用一个小任务测试。

阅读约需 6 分钟

如何防范 AI 助手中的提示词注入

限制 AI 助手处理邮件、网页和文件时能做的事,保持操作审批开启,安全地测试你的设置,并了解助手被操纵后该怎么办。

即将推出

加入候补名单

留下你的邮箱,Mono 可以下载时我们会通知你。

你会在哪里使用 Mono?