dsh-history-rewind
个人自用的小插件,给 DSH 聊天加上类似 Git 的版本回退能力。随缘维护~
UI Preview
它是干什么的?
每次和 AI 对话,后台都会自动拍下快照。
如果你觉得 AI 答偏了、或者代码改坏了,可以随时点开历史面板,一键跳回当时的状态,就像在 Git 里 checkout 一样。
- 不新建会话:就在当前窗口原地切回去;
- 彻底回滚:目标时间点之后的消息会真正消失;
- 支持改代码:不仅能回退聊天记录,还能把写过的文件代码一起恢复回去。
前置依赖
- 电脑需要安装 Git(命令行里输入
git --version 有输出即可)。
- 本插件底层是纯调用本机 Git 来做版本管理,不依赖任何第三方云服务。
安装步骤
在电脑上打开终端(Windows 推荐打开 命令提示符 (CMD) 或 PowerShell,Mac/Linux 打开 Terminal),按以下步骤操作:
1. 安装插件
方式一:直接通过 GitHub 安装(推荐)
dsh plugin --profile web add github:DDDonzy/dsh-history-rewind
方式二:通过本地源码安装
如果你已经把代码 clone 到本地:
dsh plugin --profile web add <本地插件文件夹路径>
# 例如 Windows:
# dsh plugin --profile web add E:\dsh-history-rewind
2. 重启 DSH
安装完成后,在终端重启 DSH 服务即可生效:
dsh web
怎么用?
- 打开面板:点击右上角的 HISTORY 按钮,或者输入
/history 回车;
- 选择版本:在弹出的一条条版本线上,找到你想回到的那一轮对话,点一下;
- 选择回退方式:
- 仅会话:只把聊天内容倒回去,你写的文件代码不动;
- 仅工作区:只把代码文件恢复到当时的模样,聊天记录不动;
- 会话和工作区:聊天和代码一起回到当时(最常用)。
- 点完确认后,面板会立刻关闭,页面平滑刷新并恢复到该版本。
工作区是精确还原:恢复后你的项目文件会跟快照那一刻一模一样——当时没有的文件会被删掉,当时有的会被还原,不多不少。(.gitignore 排除的目录不受影响;每次回退前也会自动整目录备份到 backups/,随时能找回。)
想关掉历史面板?直接按键盘 Esc,或者点击卡片外部任意空白区域。
核心机制
1. 快照是怎么拍的?
- 发送消息前:如果检测到你修改了项目文件,会自动拍一个
WORKSPACE 锚点,标记这次提问前的代码状态(没改文件就不拍,不产生废节点);
- AI 回答完成后:自动拍一个
TURN 完整快照,同时记录这一轮的聊天内容和最新代码;
- 所有快照都存在本机的纯裸 Git 仓库(影子仓库)里,零拷贝、不占额外空间。
2. 回退后会影响模型的回答速度吗?(缓存机制)
完全不会变慢。
大模型(如 DeepSeek、Claude)都有服务端前缀缓存(KV cache)。回退时,插件会自动还原目标时刻的工具集、系统提示词和模型路由,让新请求的前缀和历史逐字节完全一致,服务端直接命中缓存,响应速度和原来一样快。
3. 哪些文件不会被快照?(.gitignore)
快照只按目标项目自己的 .gitignore 排除文件——没有任何插件自带的默认排除列表。
- 项目第一次被快照时,如果这个项目根目录下还没有
.gitignore,插件会自动创建一份(内容取自设置面板里的"默认 .gitignore 模板",默认仅排除 .git,用户可在设置中按需添加);
- 项目已经有
.gitignore 的话,插件完全不会去改它——想调整某个项目排除哪些文件,直接编辑那个项目自己的 .gitignore 即可,跟平时用 Git 一样;
- 想改"以后新项目自动创建的默认内容",去设置页面(设置 → HISTORY-REWIND)改那个模板文本框;
.gitignore 文件本身永远会被快照收录,不会被自己的规则误排除掉;
- 目前只支持基础通配符(
*、?、开头 /、结尾 /),暂不支持 ! 取反和 ** 递归写法。
常见疑问
- 回退后还能反悔吗?
可以。旧版本依然会留在时间线上,随时可以再跳回去;每次回退前也会自动在后台做备份。
- 回退后继续对话会怎样?
如果继续聊了新的内容,时间线上会自动分叉出一条新的彩色分支,以前的旧路线依然保留。
数据存在哪?如何清理?
所有数据均保存在本地电脑的 $DSH_HOME/.dsh-history-rewind/(通常是 ~/.dsh/.dsh-history-rewind/ 或 C:\Users\<你的用户名>\.dsh\.dsh-history-rewind\):
repos/:会话聊天记录的 Git 裸仓库(按会话 1:1 隔离);
repos-ws/:项目代码快照的 Git 裸仓库;
backups/:每次回退前自动保存的物理文件备份。
如何清理历史数据?
- 想彻底重置/清空所有历史:直接把
.dsh-history-rewind 文件夹整个删掉即可(不会影响你的原项目代码,也不影响 DSH 的正常聊天)。删掉后插件会在下次对话时自动重新建库。
- 想释放磁盘:直接清理里面的
backups/ 文件夹即可(里面存的是回退前的临时备份文件)。
说明
- 个人自用的小项目,按自己的日常工作流随缘更新~
- 随便用、随便改,不提供任何保证。遇到问题可以提 issue,看到且有空时会修修 ☕