Git 历史记录清洗
当在公网环境下使用 git 仓库不小心把敏感信息提交上去时,则可以使用 filter-branch
对代码仓库进行清洗。
1. 先对本地历史进行清洗
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch <file_path>' --prune-empty --tag-name-filter cat -- --all
-
filter-branch 是让git重写每个分支
-
–force 假如遇到冲突也让git强制执行
-
–index-filter 选项指定重写的时候应该执行什么命令
-
–prune-empty 选项告诉git,如果因为重写导致某些commit变成了空(比如修改的文件全部被删除),那么忽略掉这个commit
-
–tag-name-filter 表示对每一个tag如何重命名,重命名的命令紧跟在后面,当前的tag名会从标注输入送给后面的命令,用cat就表示保持tag名不变。
-
其后的 – 表示分割符,最后的 –all 表示对所有的文件都考虑在内
2. 然后更新仓库源引用为刚才的结果
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --prune=now
3. 更新标签
git push --all --force
git push --tags --force
https://www.jianshu.com/p/11822884b924 https://blog.csdn.net/lwfcgz/article/details/49453375 https://www.cnblogs.com/developer-ios/p/6211903.html https://stackoverflow.com/questions/7654822/remove-refs-original-heads-master-from-git-repo-after-filter-branch-tree-filte https://git-scm.com/book/zh/v1/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-Git-References