【问题标题】:How do I properly remove sensitive data pushed to a Git repo?如何正确删除推送到 Git 存储库的敏感数据?
【发布时间】:2015-04-20 07:17:32
【问题描述】:

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

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

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

我在 Github 上阅读了 Remove sensitive data 页面,该页面建议更改密码 - 我已经这样做了 - 但我也想删除历史记录。

【问题讨论】:

  • 在您的远程密码提交之上已经进行了多少次提交?
  • 我在包含密码的提交之后有 5 次提交
  • 还有一个问题:除了密码文件本身之外,密码提交中还有其他内容吗?
  • 是的,在那次提交中还添加了其他内容,谢谢

标签: git github


【解决方案1】:

由于自包含明文密码的提交以来您已经进行了 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,因为您已经重写了历史记录(通过修改密码文件)。现在您拥有所有最新提交,但您已经删除了明文。

【讨论】:

  • 为了将来参考,如果您在遥控器中进行任何其他操作之前捕获了明文提交,您可以使用单行解决方案修复它。
  • 如果您想在第一次提交中更改某些内容,请从 git rebase [-i] --root $tip 开始
  • 这个答案以及this one 对社区都具有重要价值。谢谢大家,+1。
【解决方案2】:

如果是之前的commmit,则从文件中删除密码并运行

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

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

【讨论】:

  • 赞成解决这个安全漏洞(我没有克隆那个 repo 仅供参考)。
  • 我做到了,但无论如何我都不会伤害 OP。我这样做只是为了告诉他他需要更改密码,因为其他人可能不会告诉他。
  • page on Github which suggests changing the password - which I have done - 可能对未来的读者有用,而不是 OP。
  • 正如我在原帖中提到的那样我已经更改了密码。仅供参考,这不是以前的提交
  • @NRKirby 完美!我忽略了这一点。将保留答案以帮助他人。
猜你喜欢
  • 2011-09-23
  • 2014-03-14
  • 2017-11-26
  • 2012-03-22
  • 2015-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多