跳至主要内容

排查必需的状态检查问题

您可以检查常见错误并通过必需的状态检查解决问题。

谁可以使用此功能?

受保护的分支在 GitHub Free 和组织版 GitHub Free 的公共仓库中可用。受保护的分支也在 GitHub Pro、GitHub Team、GitHub Enterprise Cloud 和 GitHub Enterprise Server 的公共和私有仓库中可用。欲了解更多信息,请参阅 GitHub 的计划

如果您拥有同名的检查和状态,并将该名称选为必需的状态检查,则该检查和状态都必须通过。欲了解更多信息,请参阅 检查的 REST API 端点

注意

要成为必需的状态检查,必须在过去七天内于选定的仓库成功完成。

启用必需的状态检查后,您的分支在合并前可能需要与基础分支保持最新。这可确保您的分支已使用基础分支的最新代码进行测试。如果您的分支已落后,您需要将基础分支合并到您的分支中。欲了解更多信息,请参阅 关于受保护的分支

注意

您也可以使用 Git rebase 将分支与基础分支保持最新。欲了解更多信息,请参阅 关于 Git rebase

在所有必需的状态检查通过之前,您将无法向受保护的分支推送本地更改。相反,您会收到类似以下的错误信息。

remote: error: GH006: Protected branch update failed for refs/heads/main.
remote: error: Required status check "ci-build" is failing

注意

已保持最新且通过必需状态检查的拉取请求可以在本地合并后推送至受保护的分支。这样即可在合并提交本身不运行状态检查的情况下完成合并。

必需的检查需在最新提交 SHA 上成功通过

为了合并拉取请求,所有必需的检查必须在最新的提交 SHA 上通过。这可确保最近的更改已得到验证并符合合并前的必要标准。使用先前提交 SHA 触发的检查将不计入必需检查。成功的检查状态包括:successskippedneutral。欲了解更多信息,请参阅 关于状态检查

头部提交与测试合并提交之间的冲突

有时,测试合并提交和头部提交的状态检查结果会冲突。如果测试合并提交存在状态,则必须通过测试合并提交的检查。否则,必须通过头部提交的状态才能合并分支。

如果测试合并提交与头部提交之间存在冲突,测试合并提交的检查会显示在拉取请求的状态检查框中。这在拉取请求状态框中表现为以 Showing checks for the merge commit 开头的一行。有关测试合并提交的更多信息,请参阅 获取拉取请求的 REST API 端点

处理被跳过但仍然必需的检查

警告

如果工作流因 路径过滤分支过滤提交信息 被跳过,则与该工作流关联的检查将保持“待处理”状态。需要这些检查成功的拉取请求将被阻止合并。

然而,如果工作流中的作业因条件被跳过,它的状态将报告为“Success”。欲了解更多信息,请参阅 使用条件控制作业执行

当作业失败时,任何依赖于该失败作业的作业将被跳过且不会报告失败。需要该检查的拉取请求可能不会被阻止。若要在依赖其他作业的作业上使用必需检查,请在 needs 之外使用 always() 条件表达式,详见 在工作流中使用作业

示例

下面的示例展示了一个工作流,它要求 build 作业必须以“Successful”状态完成,但如果拉取请求未对 scripts 目录中的文件进行更改,则工作流将被跳过。

name: ci
on:
  pull_request:
    paths:
      - 'scripts/**'
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [12.x, 14.x, 16.x]
    steps:
    - uses: actions/checkout@v5
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    - run: npm ci
    - run: npm run build --if-present
    - run: npm test

由于 路径过滤,仅更改仓库根目录下文件的拉取请求不会触发此工作流,且会被阻止合并。在拉取请求中,您会看到 “Waiting for status to be reported.”

使用 GitHub Actions 和合并队列的状态检查

当拉取请求被加入合并队列时,您**必须**使用 merge_group 事件触发 GitHub Actions 工作流。

注意

如果您的仓库使用 GitHub Actions 对拉取请求执行必需检查,则需要更新工作流以将 merge_group 事件作为额外触发器。否则,在将拉取请求加入合并队列时不会触发状态检查,导致合并失败,因为必需的状态检查未被报告。merge_group 事件独立于 pull_requestpush 事件。

下面是一个报告检查的工作流示例,该检查是目标分支保护所需的。

on:
  pull_request:
  merge_group:

欲了解更多关于 merge_group 事件的信息,请参阅 触发工作流的事件

来自意外来源的必需状态检查

受保护的分支也可能需要来自特定 GitHub App 的状态检查。如果您看到类似以下的消息,请确认合并框中列出的检查是由预期的应用设置的。

Required status check "build" was not set by the expected GitHub App.
© . This site is unofficial and not affiliated with GitHub, Inc.