合并队列是什么
合并队列(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 管道负责快速反馈,队列负责最终准入。