如何正确删除推送到Git仓库的敏感数据?

时间:2015-04-20 07:17:33

标签: git github

我错误地将包含密码的文件推送到我的仓库 - 仅供参考,回购只是一个小型个人项目。

一旦我意识到密码存在,我将文件添加到.gitignore并执行git rm -r --cached <filename>,提交并推送到回购。

我现在意识到密码仍然存在于历史记录中 - 删除密码的最佳方法是什么?

我在Github上阅读Remove sensitive data页面,建议更改密码 - 我已经完成了 - 但我也希望删除历史记录。

2 个答案:

答案 0 :(得分:47)

由于自包含明文密码的提交以来您已经进行了5次提交,因此最好选择在本地分支上以交互模式进行git rebase -i。找到添加明文密码的提交的SHA-1,然后键入以下内容:

git rebase --interactive dba507c^

其中dba507c是错误提交的SHA-1的前7个字符。

改变这个:

pick dba507c comment for commit containing clear text password

对此:

edit dba507c I have removed the clear text password

更改密码文件以删除明文,然后按如下方式提交结果:

git commit --all --amend --no-edit
git rebase --continue

完成rebase,然后通过以下方式将您的(正确的)本地分支推送到远程:

git push -f origin your_branch

您需要强制推送your_branch,因为您已重写历史记录(通过修改密码文件)。现在您已经拥有了所有最新的提交,但是您已删除了明文。

答案 1 :(得分:14)

如果是以前的提交,则从文件中删除密码并运行

git add file_with_pwd
git commit --amend 
git push -f origin master

注意:一旦你在Stackoverflow上发布了这个,很多人可能已经克隆了repo(你在github和一个存储库上有相同的用户名)。 更改密码!