清除Git提交的敏感信息
在很多情况,我们由于疏忽会将一些敏感信息误传到Github上面去。 尽管我们可以使用git rm
将包含敏感信息文件删除掉,然后重新提交上传,文件就不会在 GitHub 中的文件列表显示。 但是这并不能完全将敏感信息文件从 GitHub 中完全删除,commit history
仍然会有敏感信息的文件的残留,我们仍然可以从 GitHub 中的commit history
中访问到文件。
如果想要将敏感信息文件完全删除。不仅需要将文件从 GitHub 中的文件列表中删除,同时还需要将文件从 GitHub 的commit history
中的 文件相关信息删除。
删除commit history
文件相关信息,主要有两种方法:
- filter-branch
- BFG
本文只探讨filter-branch的使用
使用 git 自带的git filter-branch
命令来实现。
此命令会将当前存在的文件也删除,注意备份。
1 | 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 |
上传覆盖 GitHub 的commit history
1 | git push origin --force --all # (--all 作用于所有分支) |
PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA 是你需要删除的敏感信息文件名
例如:
1 | git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch test/zhangsan.txt' --prune-empty --tag-name-filter cat -- --all |
以上命令就会删除test/zhangsan.txt