Github提交互相依赖的Pull Request:分支B1与B2的处理问询
处理依赖型Pull Request的几种实用方案
这种关联PR的场景我经常碰到,给你几个接地气的解决办法,按需选择就行:
方案1:直接修改B2的PR基准分支为B1
这是最省心的操作,不用动本地代码,在GitHub网页上就能搞定:
- 打开你B2的PR页面,找到「Compare changes」区域
- 点击「base: master」的下拉菜单,选择你的B1分支作为新基准
- 保存后,这个PR就只会展示B2相对于B1的新增修改,不会重复包含B1的代码
- 等上游仓库合并B1之后,你再把B2的基准切回master,此时PR里的依赖冲突大概率会自动消失
- 一定要在B2的PR描述里加上「Depends on #XX」(XX是B1的PR编号),这样维护者一眼就能看懂依赖关系,GitHub也会自动关联两个PR
方案2:本地Rebase让B2基于B1构建
如果你偏好干净的线性提交历史,推荐用这个方法:
- 先切换到B1分支拉取最新代码:
git checkout B1 && git pull origin B1 - 切回B2分支:
git checkout B2 - 执行rebase命令,把B2的提交全部移到B1的提交之后:
git rebase B1 - 如果遇到冲突,按提示解决后执行
git add .和git rebase --continue,直到rebase完成 - 因为rebase改写了B2的提交历史,推送到远程时需要用安全强制推送:
git push --force-with-lease origin B2(比直接--force更稳妥,不会覆盖别人的修改) - 同样在PR描述里标注依赖关系,线性的提交历史对很多维护者来说更友好,但如果上游团队反感改写历史,就换其他方案
方案3:在B2中合并B1分支
如果你不想改动原始提交历史,可以直接合并B1到B2:
- 切换到B2分支:
git checkout B2 - 执行合并命令:
git merge B1 - 解决冲突后提交合并记录:
git add . && git commit -m "Merge branch B1 into B2" - 推送到远程:
git push origin B2 - 这种方式会留下一条合并提交记录,好处是保留了所有原始提交轨迹,缺点是历史记录会多一条合并节点,看你和上游维护者的偏好来选
额外提醒
不管用哪种方法,都要在PR里明确说明依赖顺序,必要时可以@维护者提醒他们先处理B1。如果上游有CI检查,B2的CI大概率会因为缺少B1的修改而失败,不用慌,等B1合并后重新触发CI或者更新B2即可。
内容的提问来源于stack exchange,提问作者L. Julliard
相关产品推荐
相关产品推荐

