问题描述
说我不小心将包含信用卡号的文件中的代码推送到可公开查看的github存储库中(这实际上没有发生)。 说我很快意识到了这一点,然后将更新推送到公共仓库。公众是否可以查看我推送的文件的先前版本并查看信用卡号? 还是公众只看到提交历史和日期,而不看到所做的更改?
解决方法
是的,有。知道被推送的blob,commit或tree的任何人都可以访问旧文件,因为GitHub通常不会垃圾收集数据(尽管不能保证它们会或不会)。即使您重写历史记录以从所有分支和标签中删除该秘密,旧对象几乎肯定仍会存在并且可以访问。
从字面上看,您推送到公共存储库的任何秘密都会在您第二次泄露时受到损害;有些机器人会从字面上梳理存储库,以利用秘密。如果您推送了信用卡号,则需要将其泄露给相应的当事方;如果您按下了密码或令牌,则将其撤消并创建一个新密码。
GitHub具有instructions on how to remove sensitive data,但其中涉及与GitHub支持联系以删除旧对象。即使遵循该过程,也必须假设一旦提交给公共存储库的每个机密都是众所周知的。
,如果您进行新的提交删除了信用卡号,是的,每个人都可以看到其中包含信用卡号的旧提交。
如果您例如使用git commit --amend
或交互式rebase和git push --force-with-lease
“重写”(实际替换)提交,则不会,除非有其他引用,否则旧历史将不会公开显示。旧的提交,例如标签或其他分支,或对Github上的提交的引用。它仍将存在于您的本地存储库follow these instructions to get rid of it中。
有关更多信息,请参见Rewriting History in Pro Git。