pr-merge-base
pr-merge-base 是一个将多个 PR 合并到基线分支(main/master)的技能,采用类似队列的顺序合并方式,并处理合并冲突。
用途
把多个 PR 按顺序合并进基线分支,适用于 PR 之间可能相互冲突、或与基线分支冲突的合并场景。
主要能力
-
检测基线分支:通过
git remote show origin或仓库约定识别默认分支(main、master 或仓库特定命名)。 -
枚举 PR:列出所有待合并 PR,并获取每个 PR 的最新 HEAD。
-
创建检查点:记录当前基线分支顶端作为回滚点。
CHECKPOINT=$(git rev-parse HEAD) -
创建集成分支:在临时分支上工作,验证后再触碰基线分支。
git checkout -b merge-queue/<timestamp> <base> -
确定合并顺序:
- 若用户指定顺序,则按该顺序执行。
- 否则计算依赖/拓扑顺序(若 PR B 依赖 PR A,则先合并 A)。
- 若 PR 相互独立且无明确顺序,则呈现列表,请用户在继续前确认或重新排序。
-
带冲突处理的顺序合并:对每个 PR 依次执行:
- 尝试将
<pr-branch>通过git merge --no-ff合并进集成分支。 - 若干净合并成功,继续下一个 PR。
- 若出现冲突:
- 使用 difft 与代码库上下文分析每个冲突文件。
- 基于结构理解应用解决方案(格式偏好基线,逻辑偏好 PR)。
- 若无法有把握地解决冲突,则中止本次合并(
git merge --abort),停止并向用户报告冲突,给出双方内容与建议解决方案。
- 每次成功合并后,若构建命令可用,验证构建仍通过。
- 尝试将
-
验证集成分支:所有 PR 在集成分支上合并完成后,若可用则运行完整构建/测试套件。
-
报告结果:向用户展示已验证的集成分支。不要自动推进基线分支——仅在用户明确要求时才更新基线。
中止条件
遇到以下情况时停止队列并报告:
- 冲突无法安全自动解决。
- 合并后构建/测试失败。
- 某个 PR 已被取代或关闭。
回滚
git checkout <base> && git branch -D merge-queue/<timestamp>
基线分支在检查点处保持不变。
输出
对每个 PR 报告:成功合并、已解决冲突(含细节)或被阻塞(含原因)。