喵♂呜 的博客

一个刚毕业就当爹的程序猿 正在迷雾中寻找道路...

如何在Git历史中清理一个文件

近期发布项目的时候发现有一个证书不小心被提交到 git 仓库里了 现在需要清理掉 同时要保留以前的分支记录

git filter-branch

使用 git filter-branch 可以批量操作所有的分支历史

参数选项

  • --tree-filter 表示修改文件列表
  • --msg-filter 表示修改提交信息
  • --prune-empty 表示清理空提交
  • -f 是忽略备份

使用技巧

  • 批量删除文件 git filter-branch --index-filter 'git rm --cached --ignore-unmatch <your-file-name>'

  • Gitlab提供的命令 git filter-branch --force --tree-filter 'git rm -f <your-file-name>' HEAD

  • 删除原始引用 rm -rf .git/refs/original/

  • 清理本地缓存 git reflog expire --expire=now --all && git gc --prune=now --aggressive

  • 重新打包 git repack -A -d