如果我不小心把一个密钥提交到github.com,如何删除?
如果不小心把密钥提交到 github.com,可按以下方法删除:
删除 GitHub 上的 SSH 密钥
- 登录 GitHub 账户 :访问GitHub 官网,输入用户名和密码登录。
- 进入设置页面 :点击右上角的头像,选择 “Settings”。
- 进入 SSH 和 GPG 密钥设置 :在设置页面的左侧菜单中,找到并点击 “SSH and GPG keys”。
- 删除特定的 SSH 密钥 :在 SSH 密钥列表中,找到要删除的密钥,点击其右侧的 “Delete” 按钮,再在弹出的确认对话框中点击 “确认” 完成删除。
从代码仓库中删除密钥
如果密钥作为文件内容被提交到仓库,可使用以下两种方式清除提交记录:
使用 git filter-branch 命令
- 克隆仓库到本地 :如果还没有本地仓库,可使用
git clone <repository-url>命令克隆。 - 运行 filter-branch 命令 :执行
git filter-branch --tree-filter 'rm -f 路径/到/文件' HEAD,将路径/到/文件替换为包含密钥的文件路径,这会从所有提交历史中删除该文件。 - 强制推送到远程仓库 :运行
git push origin --force --all强制推送本地更改到远程仓库,覆盖远程的历史记录。 - 清理本地旧的未引用对象 :可执行
git reflog expire --expire=now --all和git gc --prune=now命令清理本地旧的未引用对象,减少仓库占用空间。
使用 BFG Repo-Cleaner 工具
- 下载并安装工具 :访问BFG Repo-Cleaner 官方网站,按照指引下载并安装该工具。
- 运行清理命令 :执行
java -jar bfg.jar --delete-files 路径/到/文件 .git,将路径/到/文件替换为包含密钥的文件路径,该工具会扫描并清除该文件在所有提交历史中的记录。 - 强制推送到远程仓库 :与上述使用 git filter-branch 的操作相同,运行
git push origin --force --all。 - 清理本地旧的未引用对象 :同样需要执行
git reflog expire --expire=now --all和git gc --prune=now命令清理本地旧的未引用对象。
注意事项
- 如果有其他人也在使用该仓库,在强制推送更改后,需要通知他们重新克隆仓库或同步更改。
- 密钥泄露存在一定的风险,建议在删除提交后,立即重置已泄露的密钥或密码,以防被他人利用。
- 为了预防类似情况再次发生,可在
.gitignore文件中添加密钥文件的路径,避免其被再次提交到仓库。




