首页/文章//rewind 撤不回 rm:在新加坡 Mac mini 上给 Claude Code 夜间任务搭 Git + APFS 快照 + 备份三层回滚

/rewind 撤不回 rm:在新加坡 Mac mini 上给 Claude Code 夜间任务搭 Git + APFS 快照 + 备份三层回滚

· Zumac.Ai

/rewind 救得了编辑,救不了 rm

Claude Code 的 /rewind(或在空输入框连按两次 Esc)很好用:选一条你之前发过的提示,就能把代码、对话或两者一起退回去。但它有一个容易被忽略的边界:它追踪的是 Claude 自己用编辑工具改过的文件,通过 Bash 执行的 rm、mv、cp、脚本批量改写,不在回滚范围内。

白天坐在电脑前,这个边界问题不大,看到不对马上就停。真正出事的是夜里:你让 Agent 跑一个长任务,顺手让它「收尾时清理一下遗留的 worktree 和临时目录」。如果某个 worktree 里有符号链接指向主项目的大资源目录,清理命令一旦跟着链接走,删掉的就是主项目里的东西。早上醒来,/rewind 也帮不上忙,能救回来的只有你事先准备的备份。

所以在一台常开、让 Claude Code 无人值守跑任务的 Mac mini 上,值得把「回滚底线」搭成三层:Git 提交、APFS 本地快照、独立备份。下面是具体做法。

第一层:任务开始前强制提交

最便宜也最可靠的一层。在项目的 CLAUDE.md 里写明:

## 开始长任务前
1. 运行 git status;有未提交改动先提交一次,提交信息以 "checkpoint:" 开头。
2. 新建分支或 worktree 再动手,不在 main 上直接改。
3. 任务结束前再提交一次,列出删除过的文件。

注意 .gitignore 里的目录(构建产物、素材缓存、大资源文件夹)不受 Git 保护。很多人丢的恰恰是这一块,所以还需要第二层。

第二层:APFS 本地快照,几秒钟一份

macOS 的 APFS 支持本地快照。只要在「系统设置 → 通用 → 时间机器」里配置过备份盘,就可以在任务前手动打一份:

# 任务开始前创建本地快照
tmutil localsnapshot

# 查看当前有哪些本地快照
tmutil listlocalsnapshots /

本地快照几乎是瞬间完成的,只记录之后变化的数据块。出事后,可以在访达里进入「时间机器」浏览快照,把被删的目录拖回来;也可以用命令行把快照只读挂载出来再复制。本地快照会被系统按时间和磁盘空间自动清理,所以它适合兜住「昨晚那次任务」,不适合当长期备份。

想更顺手,可以写一个小脚本,让每次启动夜间任务都先打快照:

#!/bin/zsh
# ~/bin/night-run.sh
set -e
cd ~/work/myapp
git add -A && git commit -m "checkpoint: before night run" || true
tmutil localsnapshot
claude -p "按 CLAUDE.md 的夜间任务清单执行,结束时列出所有删除和移动过的路径"

对大的素材目录,还可以在任务前用 APFS 克隆复制一份:cp -cR Assets Assets.bak-$(date +%m%d)。-c 让 macOS 走 clonefile,复制几乎不占额外空间,直到原文件被修改。

第三层:独立备份盘或远端仓库

快照和项目在同一块盘上,盘本身出问题就一起没了。至少保留一份独立的副本:

  • 时间机器备份到外接盘或网络存储,按小时自动跑。
  • 代码推到远端仓库;大资源目录用同步工具或对象存储另存一份。
  • 每周抽一次,真的从备份里恢复一个目录试试,确认备份能用。

再加一道闸:限制危险命令

备份是事后补救,事前也要收紧。几个具体做法:

  1. 在 .claude/settings.json 里,把 rm -rf、git clean -fdx、git worktree remove --force 这类命令放进需要询问的规则,而不是全部放行。规则匹配有变体漏网的情况,别只靠一条规则。
  2. 用 PreToolUse hook 做路径检查:命令里出现项目目录以外的绝对路径,或者目标是符号链接时,直接拒绝。
  3. 清理 worktree 时让 Claude 用 git worktree list 加 git worktree remove,不要手写 rm -rf 遍历目录。
  4. 要求 Agent 在结束报告里列出所有删除和移动过的路径,你早上先看这份清单,再看结果。

为什么放在常开的 Mac mini 上做

这套做法有一个前提:Claude Code、快照、备份都跑在同一台一直开着的机器上。笔记本合盖、睡眠或带出门,夜间任务会断,时间机器也不会按时跑;你也不想在自己的主力电脑上让 Agent 半夜清理目录。

把长任务放到一台单独的新加坡 Mac mini 上,主力电脑只负责连过去审结果,出了问题影响的也只是这台机器上的工作区。白天用 SSH 看日志、跑 tmutil listlocalsnapshots,需要在访达里翻快照时用 UU 远程连上桌面操作。

和 Zumac.Ai 怎么配合

Zumac.Ai 提供整机独享的新加坡 Mac mini,7×24 在线,支持 SSH 与 UU 远程连接,适合放 Claude Code 的夜间任务和配套的快照、备份脚本。Claude 账号由你自己开通和管理,机器只是一个稳定、常开的使用环境。订购与开通走 panel.zumac.ai;方案说明见 首页费用区;使用问题见 帮助中心。实际延迟取决于你本地的网络线路。

/rewind 负责撤销 Claude 的编辑,Git、快照和独立备份负责兜住 Bash 删掉的东西。三层都搭好,再放心让它通宵干活。

Zumac.Ai 新加坡 Mac mini M6,整机独享,¥999/月起,联系 Telegram @singatao。
查看方案与费用 · 帮助中心

返回首页 · 更多文章

Telegram 客服