从 Git 历史彻底删除文件
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_137732f6/git-clear-commit-history。
技能介绍
什么时候需要动历史
把敏感文件或大文件 git add 进仓库后,即便后续 commit 里删掉了,对象仍留在 .git 里;别人 clone、fork 或翻旧提交都能再看到。单靠新提交「覆盖」无法从全部分支和标签里抹掉同一路径。
技能在做什么
本技能以 git filter-repo 为主线,而不是手搓 filter-branch。流程上会先确认仓库路径、是否在当前目录,并强烈建议先备份;再检查仓库与远程状态,对单个文件、多个文件或整个目录执行历史重写,最后用 git log 等方式验证历史中是否还能搜到目标路径。
核心效果可以概括为:
- 从每一次 commit 中移除指定路径
- 同步清理所有分支与所有 tag 上的引用
- 历史改写后说明为何需要 force push,以及协作者应重新 clone 或按指引同步
若删除的是密钥、token 或私钥,技能还会提醒:在平台上吊销旧凭证、检查 fork、CI 缓存与本地旧 clone,并明确「历史删掉 ≠ 从未泄露」。
边界与注意点
- 只适用于需要从完整历史清除文件的场景;若文件仅出现在最近一次 commit,应走 amend 等更轻量的方式。
- 重写历史会改变 commit SHA,所有协作者必须对齐新历史,否则可能把已删文件再次推上去。
- 删文件后仓库体积未必立刻下降,有时还需配合
git gc等回收对象。
使用场景
- 误把 `.env` 或含 API 密钥的配置文件提交到远程,需要从全部 commit 与分支里彻底抹掉该路径
- 仓库因误提交大体积二进制或数据集导致 clone 变慢,要从历史各层删除该文件以缩小对象库
- 合规或安全审计要求移除历史中某份私钥、token 文件,并同步处理所有 tag 上的引用
- 开源仓库某路径曾公开敏感内容,需要在 force push 前按技能流程备份、过滤并验证历史中已无该文件
适合人员
- 维护公司 monorepo 的 DevOps,误合并进密钥后要在不改业务代码的前提下重写 Git 历史
- 负责开源项目维护的维护者,需要把误公开的 token 从全分支历史中删除并通知 fork 与协作者
- 刚接手遗留仓库的后端工程师,要清理历史中废弃的大文件以减轻 CI 与新人 clone 成本
- 安全响应同学跟进泄露事件,需按步骤删除历史、吊销旧凭证并检查 CI 缓存与旧 clone