删除push到github上的敏感文件
有时候总是会不小心把存有账号密码之类的敏感文件push到github上。如果这次commit只有这一个文件,并且发现的及时,那还是很好解决的,删除commit然后强推就可以了。
但是不幸的是,总有那么些时候发现的比较晚,并且那次commit中含有其他的文件。
方法1:
试试BFG这个工具吧。
http://rtyley.github.io/bfg-repo-cleaner/
方法2:
使用git filter-branch命令处理。
step 1
clone项目回来。
step 2
执行以下命令:
$ 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
替换成实际包含敏感信息的文件。
step 3
这个时候该文件其实已经删掉了,但是为了以防万一,现在你可以把它加到.gitignore
文件中。或是做一些其他的必要操作。
step 4
强推回去:
$ git push origin --force --all
记得把tag也强推一遍,如果没有打过tag,可以不用。
$ git push origin --force --tags
step 5
检查一下有没有出现其他的问题,例如少文件,文件内容不对等。没有的话就可以做最后的操作了:
$ git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
$ git reflog expire --expire=now --all
$ git gc --prune=now
PS
如果有其他人和你一起维护这个项目,那么应该让他们用rebase
来获取最新的内容,千万不要使用merge
,不然历史记录中还会出现那些敏感信息的,因为他们的本地log中还存在这些内容,merge
的话会重新推上去。
参考资料:https://help.github.com/articles/remove-sensitive-data/