快照与回滚
让 AI 改代码,最实际的问题是”改坏了怎么办”。快照系统就是这个问题的答案。
设计原则:不碰你的提交历史
DuoDuoCode 在项目之外用一个独立的影子 Git 仓库记录快照。它:
- 不会污染你的
git log - 不需要你先提交工作区
- 与你的分支、暂存区完全隔离
你的提交历史保持干净,AI 的每一步改动另有账本。
存储位置
<数据目录>/snapshot/<项目ID>/<目录哈希>/
数据目录见安装与升级中的目录结构。
如何回滚
撤销一条消息
在终端界面按 <leader>u 撤销消息——文件改动会一并回滚到该消息执行之前。
桌面端同样支持按消息粒度撤销。
回滚到更早的状态
需要回到更早的时间点时,使用会话时间线:<leader>g 查看,选择目标位置回滚。
安全门
如果工作区相对基线存在未提交的改动,回滚会被拒绝并给出提示,而不是强行覆盖。
这是刻意的设计:回滚会把文件恢复到历史状态,若你在此之后手动改过文件,直接恢复会丢弃你的改动。遇到这种情况,先提交或暂存你的改动,再执行回滚。
配置
关闭快照
{
"snapshot": false
}
关闭后不再记录快照,撤销与回滚将无法恢复文件内容(消息仍可撤销,但文件改动不可逆)。不建议关闭。
调整保留期
{
"snapshot_retention_days": 90
}
默认保留 90 天。后台会定期清理过期对象。
排除规则
以下文件不进入快照,以控制体积并避免记录无关内容:
- 被
.gitignore命中的文件 - 未跟踪且大于 2MB 的单个文件
诊断
duoduocode debug snapshot track # 手动打一个快照
duoduocode debug snapshot diff <hash> # 查看某快照的差异
duoduocode debug snapshot patch <hash> # 导出某快照的补丁