git重写历史

在第一家公司工作,我曾经写了从git history检查secret leaks的引擎工作。但是当时作为新人,对git history了解有限,当时发现git目录下secret已被删除,但是扫描git history时又依旧检测出本来已经被删除的secret的幽灵。后来才知道,原来是git history是持续性存储历史代码,而我当时单纯从最新commit删除了secret,但是git history中依然会存在这个code snippet。

可惜当时工作的时候并没有对我的代码扫描器做更进一步规划,也未能及时和领导、客户提出问题所在,后来离职后,我自个儿研究,发现确实有git重写历史的工具,尽管他不那么普遍。遗憾我没有想到这么多,是我过去的失误,今天以blog补上当时我忘记的知识点。

如果要删除 git history 带来的 leakage, 需要先把这个文件删除,然后以文件为单位将git history改写,最后再重新把正确的文件上传即可。

git重写历史步骤如下:

git filter-branch --index-filter "git rm -r --cached --ignore-unmatch ./部署文件" HEAD`

git filter-branch --index-filter "git rm -r --cached --ignore-unmatch ./backend/volume/media/import_excel_upload/*" HEAD

检查成功没有这个文件后,然后

git push --force

如果提示需要加 -f 强制重写,如:

git filter-branch -f --index-filter "git rm -r --cached --ignore-unmatch ./backend/volume/media/import_excel_upload/*" HEAD

最后git push即可


Welcome to point out the mistakes and faults!