跳至主要内容

管理分支保护规则

您可以创建一个分支保护规则,以对一个或多个分支实施某些工作流,例如,要求对合并到受保护分支的所有拉取请求进行批准审查或通过状态检查。

谁可以使用此功能?

拥有管理员权限或具有对代码库的“编辑代码库规则”权限的自定义角色的人员可以管理分支保护规则。

受保护分支在使用 GitHub Free 和 GitHub Free for Organizations 的公共仓库中可用。受保护分支在使用 GitHub Pro、GitHub Team、GitHub Enterprise Cloud 和 GitHub Enterprise Server 的公共和私有仓库中也可用。有关更多信息,请参阅“GitHub 计划”。

关于分支保护规则

您可以在仓库中为特定分支、所有分支或任何与您使用 fnmatch 语法指定的名称模式匹配的分支创建分支保护规则。例如,要保护包含单词 release 的任何分支,您可以为 *release* 创建分支规则。

您可以使用通配符语法 * 为仓库中所有当前和将来的分支创建规则。由于 GitHub 对 File.fnmatch 语法使用 File::FNM_PATHNAME 标志,因此 * 通配符不匹配目录分隔符 (/)。例如,qa/* 将匹配以 qa/ 开头并包含单个斜杠的所有分支,但不会匹配 qa/foo/bar。您可以使用 qa/**/*qa 后包含任意数量的斜杠,这将匹配例如 qa/foo/bar/foobar/hello-world。您还可以扩展 qa 字符串,例如使用 qa**/**/* 使规则更具包容性。

有关语法选项的更多信息,请参阅 fnmatch 文档

如果仓库具有多个影响相同分支的分支保护规则,则包含特定分支名称的规则优先级最高。如果有多个分支保护规则引用相同的特定分支名称,则首先创建的分支规则将具有更高的优先级。

提及特殊字符(例如 *?])的分支保护规则按创建顺序应用,因此使用这些字符的旧规则具有更高的优先级。

要为现有分支规则创建例外情况,您可以创建一个优先级更高的新的分支保护规则,例如特定分支名称的分支规则。

有关每个可用分支保护设置的更多信息,请参阅“关于受保护分支”。

注意

一次只能应用单个分支保护规则,这意味着当多个版本的规则针对相同的分支时,可能难以知道将应用哪个规则。有关分支保护规则替代方案的信息,请参阅“关于规则集”。

创建分支保护规则

创建分支规则时,您指定的分支不必存在于仓库中。

注意

仅当仓库属于组织时,才能将参与者添加到绕过列表中。

  1. 在 GitHub 上,导航到仓库的主页。

  2. 在您的仓库名称下,单击 **设置**。如果您看不到“设置”选项卡,请选择****下拉菜单,然后单击**设置**。

    Screenshot of a repository header showing the tabs. The "Settings" tab is highlighted by a dark orange outline.

  3. 在侧边栏的“代码和自动化”部分,单击** 分支**。

  4. 在“分支保护规则”旁边,单击**添加规则**。

  5. 在“分支名称模式”下,键入要保护的分支名称或模式。

  6. 可选:启用所需的拉取请求。

    注意

    如果您选择**在推送新提交时忽略过时的拉取请求批准**和/或**要求批准最新的可审查推送**,则手动为拉取请求创建合并提交并将其直接推送到受保护分支将失败,除非合并的内容与 GitHub 为拉取请求生成的合并完全匹配。

    此外,使用这些设置,如果合并基准在提交审查后引入了新的更改,则批准的审查将被视为过时。合并基准是主题分支和基准分支之间最后一个共同祖先的提交。如果合并基准发生更改,则拉取请求无法合并,除非有人再次批准工作。

    • 在“保护匹配分支”下,选择**合并前要求拉取请求**。

    • 可选:要要求在合并拉取请求之前进行批准,请选择**要求批准**。

      选择**合并前所需的批准数**下拉菜单,然后单击要在分支上要求的批准审查数。

    • 可选:要当修改代码的提交推送到分支时忽略拉取请求批准审查,请选择**在推送新提交时忽略过时的拉取请求批准**。

    • 可选:要要求代码所有者在拉取请求影响具有指定所有者的代码时进行审查,请选择**要求代码所有者审查**。请注意,如果代码有多个所有者,则来自任何代码所有者的批准都足以满足此要求。有关更多信息,请参阅“关于代码所有者”。

    • 可选:要允许特定参与者在需要时无需创建拉取请求即可将代码推送到分支,请选择**允许指定的参与者绕过所需的拉取请求**。然后,搜索并选择应允许跳过创建拉取请求的参与者。

    • 可选:如果仓库是组织的一部分,请选择**限制谁可以忽略拉取请求审查**。然后,在搜索字段中,搜索并选择允许忽略拉取请求审查的参与者。有关更多信息,请参阅“忽略拉取请求审查”。

    • 可选:要要求除最后一次推送到分支的人员之外的其他人批准合并前的拉取请求,请选择**要求批准最新的可审查推送**。有关更多信息,请参阅“关于受保护分支”。

  7. 可选:启用所需的状况检查。有关更多信息,请参阅“关于状况检查”。

    • 选择**合并前要求状况检查通过**。
    • 可选:要确保使用受保护分支上的最新代码测试拉取请求,请选择**合并前要求分支是最新的**。
    • 在搜索字段中,搜索状况检查,选择要要求的检查。
  8. 可选:选择**合并前要求解决对话**。

  9. 可选:选择**要求签名提交**。

  10. 可选:选择**要求线性历史记录**。

  11. 可选:要使用合并队列合并拉取请求,请选择**要求合并队列**。有关合并队列的更多信息,请参阅“管理合并队列”。

  12. 可选:要选择必须成功部署到哪些环境才能合并,请选择**合并前要求部署成功**,然后选择环境。

  13. 可选:使分支只读。

    • 选择**锁定分支**。
    • 可选:要允许分叉同步,请选择**允许分叉同步**。
  14. 可选:选择**不允许绕过上述设置**。

  15. 可选:在 GitHub Free 组织拥有的公共仓库中以及使用 GitHub Team 或 GitHub Enterprise Cloud 的组织拥有的所有仓库中,启用分支限制。

    • 选择**限制谁可以推送到匹配的分支**。
    • 可选:要限制创建匹配的分支,请选择**限制创建匹配分支的推送**。
    • 在搜索字段中,搜索并选择有权推送到受保护分支或创建匹配分支的人员、团队或应用。
  16. 可选:在“应用于每个人的规则(包括管理员)”下,选择**允许强制推送**。

    然后,选择谁可以强制推送到分支。

    • 选择**所有人**以允许至少具有仓库写入权限的每个人强制推送到分支,包括具有管理员权限的人员。
    • 选择**指定谁可以强制推送**以仅允许特定参与者强制推送到分支。然后,搜索并选择这些参与者。

    有关强制推送的更多信息,请参阅“关于受保护分支”。

  17. 可选:选择**允许删除**。

  18. 单击**创建**。

编辑分支保护规则

  1. 在 GitHub 上,导航到仓库的主页。

  2. 在您的仓库名称下,单击 **设置**。如果您看不到“设置”选项卡,请选择****下拉菜单,然后单击**设置**。

    Screenshot of a repository header showing the tabs. The "Settings" tab is highlighted by a dark orange outline.

  3. 在侧边栏的“代码和自动化”部分,单击** 分支**。

  4. 在要编辑的分支保护规则右侧,单击**编辑**。

  5. 对分支保护规则进行所需的更改。

  6. 点击保存更改

删除分支保护规则

  1. 在 GitHub 上,导航到仓库的主页。

  2. 在您的仓库名称下,单击 **设置**。如果您看不到“设置”选项卡,请选择****下拉菜单,然后单击**设置**。

    Screenshot of a repository header showing the tabs. The "Settings" tab is highlighted by a dark orange outline.

  3. 在侧边栏的“代码和自动化”部分,单击** 分支**。

  4. 在要删除的分支保护规则右侧,点击删除