场景和需求
如果误操作将一些敏感数据上传到远端 git
上之后,其他人在 clone
后仍然会在历史 commit
记录中查看到,这样是很危险的,所以我们需要删除远端与本地所有的敏感数据文件记录。
方案
方案 | 优点 | 缺点 |
git filter-branch |
git 原生 |
仓库大的情况下执行缓慢 |
BFG Repo-Cleaner |
1. 操作简单 2. 执行速度更快 |
非原生,需要安装 java 环境(本质上是 jar 包) |
git filter-branch
语法:
$ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' --prune-empty --tag-name-filter cat -- --all点击复制复制失败已复制
其中 PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA
为需要删除的敏感资源文件或文件夹。
示例:删除 README.md
文件:
$ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch README.md' --prune-empty --tag-name-filter cat -- --all点击复制复制失败已复制
删除完成后推送:
$ git push origin --force --all $ git push origin --force --tags点击复制复制失败已复制
清理和回收空间:
$ git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin or $ rm -rf .git/refs/original/ $ git reflog expire --expire=now --all $ git gc --prune=now点击复制复制失败已复制