关于推送保护
推送保护有助于通过在将更改推送到存储库之前扫描有无机密来避免安全漏洞。
尝试将机密推送到受推送保护保护的存储库时,GitHub 会阻止推送。 在再次推送之前,必须先从分支中删除机密。 有关如何解决被阻止推送的更多信息,请参阅本文中的“解决命令行上被阻止的推送”和“解决 Web UI 中被阻止的提交”。
如果你认为允许该机密是安全的,可以选择绕过保护。 有关详细信息,请参阅“允许推送被阻止的机密”和“绕过机密的推送保护”。
有关推送保护支持的机密和服务提供商的信息,请参阅“机密扫描模式”。
解析命令行上的阻止推送
尝试将受支持的机密推送到受推送保护保护的存储库时,GitHub 将阻止推送。 可以从分支中删除该机密,或遵循提供的 URL 来允许推送。
注释:
- 如果 Git 配置支持推送到多个分支,而不仅仅是推送到当前分支,则由于附加和意外的引用被推送,你的推送可能被阻止。 有关详细信息,请参阅 Git 文档中的
push.default
选项。 - 如果在推送超时后进行 secret scanning,GitHub 仍将在推送后扫描你的提交有无机密。
删除分支上最新提交引入的机密
如果分支上的最新提交引入了阻止的机密,可以遵循以下指南进行操作。
- 从代码中删除机密。
- 若要提交更改,请运行
git commit --amend
。 这会更新引入机密的原始提交,而不是创建新提交。 - 使用
git push
推送更改。
删除分支上先前提交引入的机密
如果机密出现在 Git 历史记录的早期提交中,还可以将其删除。 为此,需要确定哪个提交首先引入了机密,并通过交互式变基修改提交历史记录。
-
检查尝试推送分支时显示的错误消息,其中列出了包含该机密的所有提交。
remote: —— GitHub Personal Access Token —————————————————————— remote: locations: remote: - commit: 8728dbe67 remote: path: README.md:4 remote: - commit: 03d69e5d3 remote: path: README.md:4 remote: - commit: 8053f7b27 remote: path: README.md:4
-
接下来,运行
git log
以查看分支上所有提交的完整历史记录及其对应的时间戳。test-repo (test-branch)]$ git log commit 8053f7b27 (HEAD -> main) Author: Octocat <1000+octocat@users.noreply.github.com Date: Tue Jan 30 13:03:37 2024 +0100 my fourth commit message commit 03d69e5d3 Author: Octocat <1000+octocat@users.noreply.github.com> Date: Tue Jan 30 13:02:59 2024 +0100 my third commit message commit 8728dbe67 Author: Octocat <1000+octocat@users.noreply.github.com Date: Tue Jan 30 13:01:36 2024 +0100 my second commit message commit 6057cbe51 Author: Octocat <1000+octocat@users.noreply.github.com Date: Tue Jan 30 12:58:24 2024 +0100 my first commit message
-
Focusing only on the commits that contain the secret, use the output of
git log
to identify which commit comes earliest in your Git history.- In the example, commit
8728dbe67
was the first commit to contain the secret.
- In the example, commit
-
Start an interactive rebase with
git rebase -i <COMMIT-ID>~1
.- For
<COMMIT-ID>
, use the commit identified in step 3. For example,git rebase -i 8728dbe67~1
.
- For
-
In the editor, choose to edit the commit identified in step 3 by changing
pick
toedit
on the first line of the text.edit 8728dbe67 my second commit message pick 03d69e5d3 my third commit message pick 8053f7b27 my fourth commit message
-
保存并关闭编辑器,以开始交互式变基。
-
从代码中删除机密。
-
使用
git commit --amend
提交更改。 -
运行
git rebase --continue
以完成变基。 -
使用
git push
推送更改。
在 Web UI 中解析阻止的提交
使用 Web UI 尝试将受支持的机密提交到受推送保护保护的存储库时,GitHub 将阻止提交。
你将看到一个对话框,其中包含有关机密位置的信息,以及允许推送机密的选项。 机密还会在文件中加下划线,以便可以轻松找到它。
若要解决 Web UI 中被阻止的提交,需要从文件中删除机密。 删除机密后,即可提交更改。
或者,如果你确定允许机密是安全的,请使用对话框中显示的选项绕过推送保护。 有关绕过 Web UI 中的推送保护的详细信息,请参阅“存储库和组织的推送保护”。