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

如何正确删除推送到Git回购的敏感数据?,git,github,Git,Github,我错误地将一个包含密码的文件推到了我的回购协议中——仅供参考,回购协议只是一个小型个人项目 当我意识到密码存在时,我将文件添加到.gitignore并执行git rm-r--cached,提交并推送到repo 我现在意识到密码仍然存在于历史记录中-删除密码的最佳方法是什么? 我阅读了Github上的页面,该页面建议更改密码(我已经这样做了),但我也想删除历史记录。如果是以前的命令,则从文件中删除密码并运行 git add file_with_pwd git commit --amend git

我错误地将一个包含密码的文件推到了我的回购协议中——仅供参考,回购协议只是一个小型个人项目

当我意识到密码存在时,我将文件添加到
.gitignore
并执行
git rm-r--cached
,提交并推送到repo

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


我阅读了Github上的页面,该页面建议更改密码(我已经这样做了),但我也想删除历史记录。

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

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

注意:一旦你在Stackoverflow上发布了这个消息,很多人可能已经克隆了repo(你在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

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

在您的遥控器中,除了密码提交之外,还有多少次提交可能是重复的?在包含密码的一次提交之后,我有5次提交,还有一个问题:除了密码文件本身之外,密码提交中还有其他内容吗?是,在这项承诺中,还添加了其他内容,感谢投票填补了安全漏洞(我没有克隆回购供参考)。我克隆了,但无论如何我都不会伤害OP。我这样做只是为了告诉他他需要更改密码,因为其他人可能不会告诉他。Github上的
页面建议更改密码-我已经这样做了
-可能对未来的读者有用,而不是OP。正如我在最初的帖子中提到的,我已经更改了密码。仅供参考,这不是以前的commit@NRKirby完美的我忽略了这一点。将保留答案以帮助他人。为了将来参考,如果您在远程设备中进行任何其他操作之前捕获了明文提交,您可以使用一行解决方案来修复它。如果您试图在第一次提交时更改某些内容,请使用
git rebase[-i]--root$tip
代替此答案,以及对社区都有很大的价值。谢谢各位,+1。