You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置GitHub规则仅允许匹配dev-*模式的分支合并到Main

GitHub限制非dev-*源分支PR合入main的实现方式

你可以通过以下三种主流方式实现需求,按实现成本从低到高排列:

方式一:使用GitHub原生规则集(推荐,无需额外代码)

这是目前最简单的实现方案,GitHub免费版、团队版、企业版均支持:

  • 进入仓库的 Settings 页,在左侧菜单栏找到「Code and automation」分类下的 Rules → Rulesets
  • 点击「New ruleset」选择「Branch ruleset」,规则生效目标设置为 main 分支
  • 在规则配置页找到「Source branch restrictions」选项,开启后添加允许的源分支模式为 dev-*
  • 保存并启用规则集即可,后续所有目标为main的PR如果源分支不符合dev-*格式,会被直接阻止合并

方式二:通过GitHub Actions做自定义校验

如果后续需要叠加更复杂的合并校验规则,可以用自定义工作流实现:

  • 在仓库的 .github/workflows 目录下新建名为 pr-main-source-check.yml 的配置文件
  • 写入以下工作流配置:
name: 校验合入main的PR源分支格式
on:
  pull_request:
    # 仅触发目标分支为main的PR校验
    branches:
      - main
    types: [opened, synchronize, reopened]

jobs:
  check-branch:
    runs-on: ubuntu-latest
    steps:
      - name: 校验源分支是否匹配dev-*格式
        if: ${{ !startsWith(github.head_ref, 'dev-') }}
        run: |
          echo "不符合合并规则:仅允许dev-*前缀的分支合入main"
          exit 1
  • 配置生效后,进入main分支的保护规则设置,将该工作流添加到「Required status checks」必填检查列表中,开启「Require branches to be up to date before merging」即可生效

方式三:使用Pre-receive钩子(仅GitHub企业版/自托管实例支持)

如果是企业私有部署的GitHub实例,可以通过服务器端预接收钩子做全局拦截:

  • 在GitHub实例的仓库钩子配置中新增pre-receive钩子
  • 写入校验逻辑:当推送目标为main分支时,检查源分支前缀是否为dev-*,不符合则直接拒绝推送请求

内容的提问来源于stack exchange,提问作者SeanCCSmith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:54:04