上一篇复盘了事故:一次 filter-repo 式清理抹掉全部 untracked 文件,最终靠 AI 会话记录重建。这篇讲事后的工程化整改------5 条措施,目标只有两个:误删不可能发生;发生了一定找得回。
核心认知:AI 不会自己长刹车。它高效执行字面指令,「清理仓库」就真的会清掉没入库的一切。防丢要在流程上做硬约束,而不是指望模型更谨慎。

措施 1:写完即 commit,文件不过夜
git 的全部保护(reflog / fsck / revert)只覆盖进入对象库的内容,untracked 文件等于裸奔。规矩改为:内容产出当天 commit,哪怕后续还要改。
「待发布」是流程状态,不是不入库的理由。
措施 2:图片 URL 中央清单(防「图在云上、地址丢了」)
事故中最憋屈的一点:166 张配图在 OSS 上完好,但「本地路径 → 公网 URL」的映射随稿子一起丢失,且 RAM 子账号无 ListObjects 权限无法枚举------看得见,摸不着。
整改:发布管线的图片上传函数里加钩子,每次上传成功即向中央清单追加一条 JSONL 记录:
python
def _record_image_manifest(article_dir: Path, mapping: dict) -> None:
"""把「本地路径 → 公网URL」追加到中央清单。"""
if not mapping:
return
manifest = vault_root / "06 - 长期记忆库" / "assets" / "oss-image-manifest.jsonl"
manifest.parent.mkdir(parents=True, exist_ok=True)
with open(manifest, "a", encoding="utf-8") as f:
for rel, url in mapping.items():
f.write(json.dumps({
"ts": datetime.now().isoformat(timespec="seconds"),
"article_dir": str(article_dir),
"local": rel, "url": url,
}, ensure_ascii=False) + "\n")
清单文件入库 git。本地图片全丢时,按清单可从 OSS 逐张拉回。关键是钩子嵌在上传链路里自动执行,不依赖人的记性。
措施 3:清理命令强制 dry-run
git clean -fd 无回收站、无确认、无后悔药。规矩:任何清理操作先跑 git clean -nd 输出将删列表,人工确认后才允许去 n 执行。该约束写进了给 AI 助手的全局指令------AI 执行清理类命令前必须先展示 dry-run 结果并等待批准。
成本为零,拦住最高频的事故类型。
措施 4:stash 一律带 -u
清理前的「保险 stash」为什么没保住稿子?git stash 默认不收 untracked 文件。规矩:git stash push -u,一字之差,决定未跟踪文件保不保得住。
同理,filter-repo 类历史改写操作前,先全量提交或带 -u 备份,再动历史。
措施 5:不可再生资产必入库,可再生资产给找回路径
仓库分层:
- 入库:文章 md、脚本源码、prompt、URL 清单------不可再生资产
- .gitignore:生成的大图 PNG------OSS 为主存储,本地丢失可按措施 2 的清单拉回;仓库也不被二进制拖垮
原则:可再生性决定存储策略,两头各占一头。
结语
五条措施落地成本不到一个下午,防住的事故代价是一个月的产出。

AI 时代常见的错觉是「丢了让 AI 再写一遍」。这次能靠会话记录重建是运气------会话会过期、会被压缩截断、会换模型。把「AI 记得」当备份策略,本身就是下一个事故的种子。
如果这篇对你有用,欢迎关注 看「AI 工具人 PM 实战」系列更新;这 5 条你中过哪条的枪?评论 聊聊;觉得有用就收藏备用。