如何正确删除推送到 Git 存储库的敏感数据?
How do I properly remove sensitive data pushed to a Git repo?
我错误地将包含密码的文件推送到我的存储库 - 仅供参考,存储库只是一个小的个人项目。
一旦我意识到密码存在,我将文件添加到 .gitignore
并执行 git rm -r --cached <filename>
,提交并推送到 repo。
我现在意识到密码仍然存在于历史记录中 - 删除密码的最佳方法是什么?
我阅读了 Github 上的 Remove sensitive data 页面,其中建议更改密码 - 我已经完成 - 但我也想删除历史记录。
如果是之前的提交,则从文件中删除密码并运行
git add file_with_pwd
git commit --amend
git push -f origin master
注意:一旦您将其发布到 Whosebug 上,许多人可能已经克隆了该存储库(您在 github 上具有相同的用户名并且只有一个存储库)。 更改密码!
由于自包含明文密码的提交以来您已经进行了 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
完成变基,然后通过以下方式将您的(正确的)本地分支推送到远程:
git push -f origin your_branch
您需要强制推送 your_branch
因为您已经重写了历史记录(通过修改密码文件)。现在您拥有了所有最新的提交,但是您已经删除了明文。
我错误地将包含密码的文件推送到我的存储库 - 仅供参考,存储库只是一个小的个人项目。
一旦我意识到密码存在,我将文件添加到 .gitignore
并执行 git rm -r --cached <filename>
,提交并推送到 repo。
我现在意识到密码仍然存在于历史记录中 - 删除密码的最佳方法是什么?
我阅读了 Github 上的 Remove sensitive data 页面,其中建议更改密码 - 我已经完成 - 但我也想删除历史记录。
如果是之前的提交,则从文件中删除密码并运行
git add file_with_pwd
git commit --amend
git push -f origin master
注意:一旦您将其发布到 Whosebug 上,许多人可能已经克隆了该存储库(您在 github 上具有相同的用户名并且只有一个存储库)。 更改密码!
由于自包含明文密码的提交以来您已经进行了 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
完成变基,然后通过以下方式将您的(正确的)本地分支推送到远程:
git push -f origin your_branch
您需要强制推送 your_branch
因为您已经重写了历史记录(通过修改密码文件)。现在您拥有了所有最新的提交,但是您已经删除了明文。