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

NRK*_*rby 32 git github

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

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

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

我在Github上阅读了删除敏感数据页面,建议更改密码 - 我已经完成了 - 但我也想删除历史记录.

Tim*_*sen 55

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

git rebase --interactive dba507c^
Run Code Online (Sandbox Code Playgroud)

dba507c用于错误提交的SHA-1的前7个字符在哪里.

改变这个:

pick dba507c comment for commit containing clear text password
Run Code Online (Sandbox Code Playgroud)

对此:

edit dba507c I have removed the clear text password
Run Code Online (Sandbox Code Playgroud)

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

git commit --all --amend --no-edit
git rebase --continue
Run Code Online (Sandbox Code Playgroud)

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

git push -f origin your_branch
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你想在你的第一次提交中改变一些东西,请从 `git rebase [-i] --root $tip` 开始 (2认同)

hek*_*mgl 14

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

git add file_with_pwd
git commit --amend 
git push -f origin master
Run Code Online (Sandbox Code Playgroud)

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

  • 支持获取该安全漏洞(我没有克隆该回购FYI). (2认同)