基准分支被强制推送后仅用rebase禁止merge时如何更新feature分支
Git feature分支同步被rebase过的远程develop分支的操作方法
核心原理是使用git rebase的--onto参数,跳过旧develop分支和新develop分支的公共提交差异部分,仅迁移feature分支上独有的提交,避免大量无意义冲突。
操作步骤
- 先备份当前的feature分支,避免操作失误丢失代码:
git branch feature-bak - 拉取最新的远程develop分支到本地:
git fetch origin develop - 找到feature分支从旧develop分支分叉的提交哈希值,记为
分叉提交哈希:# 如果本地还没更新develop分支,直接运行以下命令即可获取分叉点 git merge-base feature develop - 执行rebase操作,将feature分支上「分叉提交之后的所有独有提交」迁移到最新的远程develop分支顶端:
git rebase --onto origin/develop <分叉提交哈希> feature - 本次rebase只会在你自己修改的feature代码和最新develop代码重叠的位置产生冲突,按正常流程解决冲突后执行
git rebase --continue即可完成同步。如果中间操作出错,可以执行git rebase --abort回退,或者用之前备份的feature-bak分支恢复。
为什么直接执行git rebase develop会产生大量冲突
远程develop分支被强制推送后,旧develop分支的历史提交已经被修改/替换,直接执行git rebase develop时,Git会把旧develop的提交和新develop的提交当作两个不同分支的独立提交进行对比,大量公共代码的变更都会被识别为冲突,本质是Git无法自动识别新旧develop的提交对应关系导致的。
内容的提问来源于stack exchange,提问作者Jose Francisco Chavez Carreon
相关产品推荐
相关产品推荐

