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

v8wbuo2f  于 2023-03-06  发布在  Git
关注(0)|答案(3)|浏览(126)

我错误地将一个包含密码的文件推到了我的回购协议中-仅供参考回购协议只是一个小的个人项目。
当我意识到密码存在时,我将文件添加到.gitignore并执行git rm -r --cached <filename>,提交并推送到repo。
我现在意识到密码仍然存在于历史记录中-删除它的最佳方法是什么?
我读了Github上的Remove sensitive data页面,它建议更改密码-我已经这样做了-但我也想删除历史记录。

2w2cym1i

2w2cym1i1#

由于在包含明文密码的提交之后你已经提交了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

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

git push -f origin your_branch

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

syqv5f0l

syqv5f0l2#

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

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

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

vmpqdwk3

vmpqdwk33#

你可以在分支中使用git reset --soft来撤销最后一次提交。
然后从相应的文件中删除凭据。
然后执行命令序列git add <updated-file>git commitgit push -f
例如:

git checkout <branch-name>
git reset --soft HEAD~1
git add <updated-file>
git commit -m "commit message"
git push -f origin <branch-name>

相关问题