近期发布项目的时候发现有一个证书不小心被提交到 git 仓库里了 现在需要清理掉 同时要保留以前的分支记录
git filter-branch
使用
git filter-branch
可以批量操作所有的分支历史
指令
1 | git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch 需要清理的文件' --prune-empty --tag-name-filter cat -- --all |
1 | rm -rf .git/refs/original/ |
1 | git push origin --force --all |
参数选项
--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
查找历史大文件
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"