如何删除 Git 记录中的敏感信息

最近一些内部开发的 Git Repository 需要开始做对外披露了,回想起当初测试时可能曾经把一些敏感信息给提交到 git 里了,尽管最后一次提交已经把敏感信息删除了,但是中间的提交历史是包含敏感信息的,因此不能直接把代码丢出去了,但是 git 的提交记录我还是想要保留的,这就成了一个问题了。当然最后还是成功解决了,所有的操作都是直接使用 git 命令完成的,特此记录一下。

第一步:

查找敏感信息所存在的文件
1
$ git rev-list --all | xargs git grep -i YOUR-SENSITIVE-DATA

第二步:

在所有的 Git 记录中删除对应的文件
1
2
3
$ git filter-branch --force --index-filter \
'git rm -r --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' \
--prune-empty --tag-name-filter cat -- --all

这样做实际上把那些含有敏感信息的提交记录都删除了。

之前:

执行操作前
1
2
$ git log | grep commit | wc -l
472

之后:

执行操作后
1
2
$ git log | grep commit | wc -l
461

减少的 11 个 commits 就是包含敏感信息的 commits。