Git如何将直接父分支已合并的分支变基到间接父分支并解决推送报错
报错原因说明
你执行的两种变基操作本身逻辑是正确的,变基操作会重写分支的提交历史,导致本地C分支的提交链和远程仓库中存储的旧C分支历史产生分叉,因此普通git push属于非快进更新,会被远程仓库默认规则拒绝。
完整操作流程
- 第一步先同步本地A分支为远程最新状态,避免基于旧的A提交做变基:
git checkout A git pull origin A
- 第二步执行精准变基操作,推荐使用
--onto参数避免重复处理B已经合并到A的提交:
git rebase --onto A B C
该命令会将C分支上不属于B分支的独有提交,全部迁移到A分支的最新提交节点上,完全匹配你需要的效果。
- 如果变基过程中出现代码冲突,逐个解决冲突文件后执行
git add <冲突文件路径>,再执行git rebase --continue,直到变基流程全部完成。 - 第三步推送重写历史后的C分支到远程仓库,需要使用强制推送参数:
git push origin C --force-with-lease
提示:
--force-with-lease比普通--force更安全,会先校验远程C分支是否有其他人提交了新改动,如果有会先提示你同步,避免误覆盖他人的提交。如果你确认远程C分支只有你自己维护,也可以直接使用git push origin C -f完成推送。
协作场景注意事项
强制推送会覆盖远程C分支的历史记录,操作前请确认团队内没有其他成员正在基于旧的C分支做开发,避免影响协作流程。如果C是多成员共同维护的分支,更推荐使用git merge A的方式合并A的改动到C,该方案不会重写分支历史,完成合并后普通git push即可提交。
内容的提问来源于stack exchange,提问作者Diksha
相关产品推荐
相关产品推荐

