我错误地将包含密码的文件推送到我的仓库 - 仅供参考,回购只是一个小型个人项目。
一旦我意识到密码存在,我将文件添加到.gitignore
并执行git rm -r --cached <filename>
,提交并推送到回购。
我现在意识到密码仍然存在于历史记录中 - 删除密码的最佳方法是什么?
我在Github上阅读Remove sensitive data页面,建议更改密码 - 我已经完成了 - 但我也希望删除历史记录。
答案 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和一个存储库上有相同的用户名)。 更改密码!