合并依赖CI校验的两个Pull Request至基准分支的正确方式咨询
如何同步PR B的变更到PR A并完成合并?
没问题,我来帮你理清这个合并流程,还有你关心的分支状态问题~
首先直接给你结论:你完全可以先把Pull Request B合并到A,再将A合并到基准分支,这样能让A和B的变更都进入基准分支,且两个PR都可以被关闭。不过更推荐的常规做法是先把B合并到基准分支,再将基准分支的最新变更同步到A——两种方式都能解决你的CI问题,我分别给你拆解下:
方案1:先合并B到基准分支(更推荐)
这是团队协作里更常规的方式,因为修复基准分支问题的PR B应该优先进入主分支,让所有后续分支都能受益:
- 第一步:合并PR B到基准分支(比如
main),此时基准分支就包含了b1、b2的修复代码 - 第二步:切换到你的A分支,执行:
如果你想要更整洁的提交历史,可以用rebase替代pull:git checkout A git pull origin maingit rebase origin/main - 第三步:把更新后的A分支推送到远程:
(如果用了rebase,可能需要加git push origin A-f强制推送,记得提前确认团队是否允许rebase远程分支) - 完成后PR A的CI会自动重新运行,应该就能通过校验了,之后直接合并PR A到基准分支即可。最终基准分支的提交历史会是:原基准提交 →
b1→b2→a1→a2(merge方式),或者a1、a2被rebased到b1、b2之后(rebase方式)。
方案2:先合并B到A,再合并A到基准分支
如果因为某些原因暂时不想把B合并到基准,这个方式也可行:
- 第一步:切换到A分支:
git checkout A - 第二步:合并B分支到A:
(如果想简化提交历史,可以用git merge Bgit merge --squash B,把b1、b2合并成一个新提交) - 第三步:推送到远程A分支:
git push origin A - 此时PR A的CI会重新运行,通过后合并PR A到基准分支,最后关闭PR B即可(因为它的变更已经包含在A里了)。不过要注意:有些团队可能要求修复类PR单独合并到基准,避免主分支的修复依赖业务分支,所以最好先和团队确认。
关于ABC分支的合并状态
你提到的ABC分支(合并A、B、C后的分支),最终状态取决于你用的合并方式,不会出现你例子里重复的c1 c2提交——Git合并时只会添加当前分支没有的提交,不会重复已存在的内容:
普通merge(保留完整提交历史)
假设你按「合并C到A → 合并B到AC」的顺序操作,最终ABC分支的提交历史会是:
共同祖先 → a1 → a2 → c1 → c2 → [合并提交节点] → b1 → b2
如果调整合并顺序(比如先合并B到C,再合并A到BC),提交顺序会变化,但最终一定会包含a1、a2、b1、b2、c1、c2所有提交,没有重复。
Squash merge(合并分支提交为单个)
如果合并时用了squash选项,比如合并C到A时 squash,AC分支的提交会是a1 → a2 → [squashed c1+c2];再合并B时 squash,ABC分支就会是a1 → a2 → [squashed c1+c2] → [squashed b1+b2],历史更简洁,但会丢失原分支的单个提交细节。
内容的提问来源于stack exchange,提问作者Nadir Laskar
相关产品推荐
相关产品推荐

