根据您的配置,代码扫描结果可能会以检查结果和注释的形式出现在拉取请求中。有关更多信息,请参阅 关于代码扫描警报。
查看代码扫描检查的结果
对于所有代码扫描配置,包含代码扫描结果的检查为:代码扫描结果。每个使用的分析工具的结果单独显示。对拉取请求中更改的代码行产生的任何新警报均以注释形式显示。
要查看分析分支的完整警报集,请点击 View all branch alerts。这将打开完整的警报视图,您可以按类型、严重性、标签等对分支上的所有警报进行筛选。有关更多信息,请参阅 评估您仓库的代码扫描警报。

管理检查失败的严重级别
如果代码扫描结果检查发现任何严重性为 error、critical 或 high 的问题,检查将失败,错误将在检查结果中报告。如果代码扫描发现的所有结果均为更低的严重性,则这些警报将被视为警告或备注,检查将成功。

您可以在仓库设置中覆盖默认行为,通过指定会导致拉取请求检查失败的严重性和安全严重性级别。有关更多信息,请参阅 代码扫描的工作流配置选项。
诊断代码扫描配置问题
根据您的配置,您可能会在已配置代码扫描的拉取请求上看到额外的检查运行。这些通常是分析代码或上传代码扫描结果的工作流。当分析出现问题时,这些检查对于排查非常有用。
例如,如果仓库使用 CodeQL 分析工作流,则会在结果检查运行之前为每种语言运行一个 CodeQL / Analyze (LANGUAGE) 检查。在出现配置问题时,或拉取请求导致分析所编译语言的构建失败时(例如 C/C++、C#、Go、Java、Kotlin、Rust 和 Swift),分析检查可能会失败。
与其他拉取请求检查一样,您可以在 Checks 选项卡上查看检查失败的完整细节。有关配置和排错的更多信息,请参阅 代码扫描的工作流配置选项 或 排查代码扫描分析错误。
在拉取请求中查看警报
您可以通过查看 Conversation 选项卡来看到拉取请求中所引入更改的差异内的任何代码扫描警报。代码扫描会发布一个拉取请求审查,将每个警报显示为触发该警报的代码行上的注释。您可以直接从注释中对警报进行评论、驳回警报或查看其路径。点击 显示更多详情 链接即可查看警报的完整详情,该链接将带您进入警报详情页面。

您还可以在 Files changed 选项卡中查看拉取请求中所引入更改的差异内的所有代码扫描警报。
如果您在拉取请求中添加了新的代码扫描配置,您将在拉取请求中看到一条评论,指引您前往仓库的 安全性和质量 选项卡,以便查看该拉取请求分支上的所有警报。有关查看仓库警报的更多信息,请参阅 评估您仓库的代码扫描警报。
如果您对仓库拥有写入权限,某些注释会包含带有额外上下文的链接。以上 CodeQL 分析的示例中,您可以点击 用户提供的值 查看不可信数据进入数据流的位置(称为来源)。在此情况下,您还可以点击 显示路径 查看从来源到使用该数据的代码(汇点)的完整路径。这使得检查数据是否不可信或分析是否未识别来源和汇点之间的数据消毒步骤变得容易。有关使用 CodeQL 分析数据流的信息,请参阅 关于数据流分析。
要查看更多关于警报的信息,拥有写入权限的用户可以点击注释中显示的 显示更多详情 链接。这使您能够查看工具在警报视图中提供的所有上下文和元数据。在下面的示例中,您可以看到显示严重性、类型以及相关通用弱点枚举(CWE)的标签。该视图还显示了引入该问题的提交。
警报页面上的状态和详细信息仅反映仓库默认分支上警报的状态,即使该警报存在于其他分支。您可以在警报页面右侧的 Affected branches 部分查看非默认分支上警报的状态。如果警报在默认分支不存在,警报状态将显示为 “in pull request” 或 “in branch”,并呈灰色。Development 部分显示将修复该警报的关联分支和拉取请求。
在警报的详细视图中,某些代码扫描工具(如 CodeQL 分析)还会包括问题描述以及一个 显示更多 链接,提供如何修复代码的指导。

在拉取请求中对警报发表评论
您可以对出现在拉取请求中的任何代码扫描警报进行评论。警报以注释形式出现在拉取请求的 Conversation 选项卡中,作为拉取请求审查的一部分,也会显示在 Files changed 选项卡中。
您可以选择要求在拉取请求合并前,所有对话(包括代码扫描警报的对话)都已解决。有关更多信息,请参阅 关于受保护分支。
在拉取请求中修复警报
任何对拉取请求具有推送权限的成员都可以修复该拉取请求中识别的代码扫描警报。如果您对拉取请求提交更改,将触发拉取请求检查的新运行。如果您的更改修复了问题,警报将关闭,注释将被移除。
在拉取请求中使用 Copilot Autofix 对警报的建议进行处理
GitHub Copilot Autofix 是代码扫描的扩展,为您提供有针对性的建议,帮助您在拉取请求中修复代码扫描警报(包括 CodeQL 警报)。这些可能的修复由大型语言模型(LLM)自动生成,使用来自代码库、拉取请求以及代码扫描分析的数据。
注意
使用 GitHub Copilot Autofix 无需 GitHub Copilot 订阅。Copilot Autofix 对 GitHub.com 上的所有公共仓库以及拥有 GitHub 代码安全许可证的组织和企业内部或私有仓库均可使用。

生成 Copilot Autofix 建议并发布到拉取请求
当仓库启用 Copilot Autofix 时,警报会像往常一样显示在拉取请求中,代码扫描发现的任何警报信息会自动发送给 LLM 进行处理。LLM 分析完成后,所有结果会以评论形式发布在相关警报上。有关更多信息,请参阅 代码扫描中负责任地使用 Copilot Autofix。
注意
- Copilot Autofix 支持 CodeQL 查询的子集。有关 Copilot Autofix 可用性的详细信息,请参阅 CodeQL 分析查询 中链接的查询表。
- 分析完成后,所有相关结果会一次性发布到拉取请求中。如果您的拉取请求中至少有一个警报带有 Copilot Autofix 建议,您应假设 LLM 已完成对代码潜在修复的识别。
- 对于未被 Copilot Autofix 支持的查询生成的警报,您会看到一则提示,说明该查询不受支持。如果针对受支持查询的建议未能生成,警报上会出现一则提示,建议您尝试推送另一次提交或联系支持。
- Copilot Autofix 并不能在所有情况下为每个代码扫描警报生成修复。该功能以最佳努力为原则,不能保证 100% 成功。有关自动生成修复的限制信息,请参阅 建议的限制。
通常,当您对拉取请求提出修改建议时,您的评论仅包含对拉取请求中所更改的单个文件的更改。下图显示了一个 Copilot Autofix 评论,建议对触发警报的 index.js 文件进行修改。由于潜在的修复需要新增对 escape-html 的依赖,评论还建议将此依赖添加到 package.json 文件中,尽管原始拉取请求并未对该文件进行任何更改。

评估并提交 Copilot Autofix 建议
每个 Copilot Autofix 建议都展示了针对您代码库中代码扫描警报的潜在解决方案。您必须评估这些建议的更改,以确定它们是否适合作为代码库的解决方案,并确保它们保持预期行为。有关 Copilot Autofix 建议的限制信息,请参阅 “代码扫描中负责任地使用 Copilot Autofix” 中的 建议的限制 与 减轻建议限制的措施。
- 点击 编辑 以显示编辑选项并选择您偏好的方式。
- 在 使用 GitHub CLI 编辑 下,按照说明在本地检出拉取请求并应用建议的修复。
- 选择 编辑 FILENAME 在 GitHub 上直接编辑文件并应用建议的修复。
- 可选地,如果您更愿意在本地仓库或分支上应用修复,请选择建议中的下拉菜单。
- 选择 查看 autofix 补丁 以显示将建议的修复应用于任意本地仓库或分支的说明。
- 选择 复制已修改的行 LINE_NUMBER 以复制建议中的特定行。
- 根据需要测试并修改建议的修复。
- 完成对更改的测试后,提交更改并推送到您的分支。
- 将更改推送到您的分支将触发拉取请求的所有常规测试。确认单元测试仍然通过,并且代码扫描警报已被修复。
驳回 Copilot Autofix 建议
如果您决定拒绝 Copilot Autofix 建议,请在评论中点击 Dismiss suggestion 以驳回该建议的修复。
在拉取请求中驳回警报
关闭警报的另一种方式是将其驳回。如果您认为不需要修复警报,可以驳回该警报。例如,仅在测试中使用的代码错误,或修复错误的工作量大于改进代码的潜在收益。如果您对仓库拥有写入权限,代码注释和警报摘要中会出现 驳回警报 按钮。点击 驳回警报 时,系统会提示您选择驳回警报的原因。

从下拉菜单中选择适当的原因非常重要,因为这可能影响查询在后续分析中是否继续包含。您也可以选择对驳回进行评论,以记录警报驳回的上下文。驳回评论会添加到警报时间线中,可在审计和报告时作为依据。您可以使用代码扫描 REST API 检索或设置评论。该评论位于 dismissed_comment,对应 alerts/{alert_number} 端点。有关更多信息,请参阅 代码扫描的 REST API 端点。
如果您将 CodeQL 警报驳回为误报,例如因为代码使用了不受支持的消毒库,请考虑向 CodeQL 仓库贡献代码以改进分析。有关 CodeQL 的更多信息,请参阅 为 CodeQL 做贡献。
欲了解有关驳回警报的更多信息,请参阅 解决代码扫描警报。