基础分支被Squash合并到主分支后,如何合并依赖分支?
解决依赖分支被Squash合并后的Git重基问题
问题场景
当包含提交A、B的依赖分支被Squash合并为提交D到master后,基于该分支开发的功能分支(含提交C)仍保留A、B提交。现在需要将C合并到master时剔除A、B,同时保留原有PR的评审记录。
最优解决方案:使用git rebase --onto直接迁移目标提交
这个方法无需手动删除提交,能精准将提交C移到master顶端,且保留原PR的评审记录(因为是在原有分支上更新,PR关联的分支未变更)。
操作步骤:
- 切换到需要处理的功能分支(假设分支名为
feature-C),并拉取最新远程代码:
git checkout feature-C git fetch origin
- 执行
rebase --onto命令,将提交C从A-B分支迁移到master分支:
git rebase --onto origin/master <提交B的哈希值> feature-C
- 说明:
<提交B的哈希值>是提交B的SHA-1值(可通过git log查看),该命令会把B之后的所有提交(仅提交C)从原分支摘出,接到origin/master顶端。 - 简化写法:如果提交C是提交B之后的第一个提交,可用相对引用替代哈希值:
git rebase --onto origin/master feature-C~1 feature-C
- 若过程中出现冲突,解决冲突后继续重基:
git add . git rebase --continue
- 由于重基修改了分支历史,需要强制推送更新到远程分支(注意:若有其他协作者在该分支工作,需提前沟通):
git push --force-with-lease origin feature-C
方案优势
- 操作精准,无需在交互式重基中手动选择删除A、B提交,减少繁琐步骤;
- 基于原有分支更新,PR的评审讨论记录不会丢失;
- 最终分支历史更简洁,仅保留提交C和master的最新状态。
内容的提问来源于stack exchange,提问作者philosofool
相关产品推荐
相关产品推荐

