首页/开发/CI/CD 与发布速查/合并队列(GitHub Merge Queue)
流水线设计54 条

合并队列(GitHub Merge Queue)

按队列把多个 PR 合成临时分支验证后再合入主干:解决「各自全绿、合起来红」的语义冲突问题。

CI/CD 与发布速查开发更新于 2026-10-13

合并队列是什么

合并队列(Merge Queue)是 GitHub 的分支保护能力:PR 通过评审、进入队列后,系统按序把队列中的 PR 与主干当前状态合成临时分支,在合成结果上运行必需检查,通过才合入主干。它解决的是「各自全绿、合起来红」——每个 PR 单独跑检查都通过,但两个 PR 的改动在语义上冲突(改了同一个函数、同一段配置),直接叠加后主干就挂了。队列把组合验证自动化,也替代了手工「Update branch 再等一轮」的反复重跑。

基本信息

适用平台GitHub.com(具体计划支持范围以官方文档为准)
触发事件merge_group;被要求的状态检查需同时响应 merge_group 与 pull_request
启用入口仓库 Settings → Branches → 分支保护中开启 Merge queue
队列行为按序合成临时分支验证;前一个失败时后续基于新主干重新验证
批量控制可设置批量大小等参数,按 Runner 容量调整

典型使用场景

  • 主干保护严格的仓库:requires status checks 必须先绿才能合,用队列保证「绿」是基于最新主干的组合结果。
  • 高频合并的团队:合并高峰时不再互相踩点,队列串行化验证顺序,减少手工重试。
  • 两个 PR 改动同一文件同一函数的场景:队列在合成结果上验证,语义冲突在合入前暴露。
  • CI 容量有限的仓库:用批量参数控制同时验证的 PR 数量,避免流水线互相抢占 Runner。
  • 希望减少「Update branch」往返的团队:基于最新主干的验证交给队列统一完成。

工作流必须响应

工作流必须响应
on:
  pull_request:
  merge_group:
# 需要作为必需检查的作业,必须在两个事件上都能运行
# 否则 PR 进入队列后检查不出现,永久等待

队列行为速查

情况队列行为
PR 进入队列与主干合成临时分支,运行必需检查
检查通过合入主干,队列前进
检查失败该 PR 移出队列,后续 PR 基于新主干重新验证
PR 有新提交移出队列,需重新入队
只在 pull_request 上定义的必需检查会让队列卡在等待状态:检查必须同时由 merge_group 触发。
队列里的验证是「合并后结果」,与 PR 自身流水线互为补充:PR 管道负责快速反馈,队列负责最终准入。

易错点

  • 必需检查不响应 merge_group:队列中 PR 永久等待、无法合入,先检查工作流 on: 列表再排查其他原因。
  • 队列批量参数与 Runner 容量不匹配:批量过大导致单次验证时间与失败率上升,从小批量开始逐步调。
  • 必需检查名称与实际作业名不一致:名称不匹配的检查永远不出现,队列同样卡住,改动作业名后同步更新分支保护。
  • 把队列当评审替代品:队列只做组合验证,不代替代码评审与测试覆盖,评审规则仍按分支保护配置。
  • 重排不观察:一次失败会让后续 PR 全部重验、吞吐骤降,用队列页面优先修复被移出的 PR。

数据来源与参考

  • GitHub Docs《Queueing a pull request》
  • GitHub Docs《Events that trigger workflows》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌