从历史中删除文件是什么
用 --path 指定目标、再用 --invert-paths 反选,即可把该路径从全部历史中删除:误提交的大文件、构建产物、内部资料都通过这个组合清理。它重写每一处触及该路径的提交,全部哈希随之变化,属于历史清理的重手段,执行前要先确认范围与影响面。
基本信息
| 删除文件 | git filter-repo --path secret.txt --invert-paths |
|---|---|
| 删除目录 | git filter-repo --path build/ --invert-paths |
| 多路径 | 可写多条 --path,反选规则同时生效 |
| 操作位置 | 在裸克隆或临时副本上操作,先备份原仓库 |
| 数据恢复 | 清理前对原仓库做一次完整克隆或打包备份,留好回退路径 |
| 后续动作 | 校验体积变化,通知协作者按新历史重新克隆 |
典型使用场景
- 误提交大文件:从历史中删掉整个路径,仓库体积随之回落。
- 清理构建产物:build/、dist/ 被多轮误提交后一次性从历史移除。
- 移除内部资料:误上传的文档或样例数据按路径清理,并轮换相关凭据。
- 拆分仓库前瘦身:把不属于该仓库的目录从历史剥离,再迁移。
- 降低克隆成本:清理后新克隆不再下载无用的大对象。
- 组合规则:先按路径删除、再按大小过滤,分步执行每步验证。
常用示例
常用示例
git filter-repo --path build/ --path dist/ --invert-paths # 从全部历史删除这两个目录
git log --oneline -- build/ | head # 校验:期望没有输出
git count-objects -vH # 对比清理前后的体积
# 清理后所有提交哈希变化,重推与协作者同步按团队流程执行删除历史文件后旧哈希在外部仍可能被引用;涉及敏感信息时还需轮换相关凭证,并检查公开 fork、镜像与缓存中的残留。执行前先在副本上演练一遍,确认输出日志符合预期。