BitBucket上使用Git Rebase解决合并冲突后推送出现分支分歧问题
问题根因
你遇到的分支分叉报错是rebase操作的正常现象:rebase会重写当前功能分支的提交历史,把你的本地提交挪到最新的develop分支提交之后,此时本地分支的提交链和远程对应分支的提交链已经完全不同,才会触发分叉提示。这时候绝对不能执行git pull,pull会默认执行merge操作,把远程老的分支提交和你rebase后的本地提交合并,直接覆盖你之前修改的冲突内容。
正确的冲突解决+推送流程
- 切换到你的功能分支:
git checkout <你的功能分支名> - 拉取远程最新的
develop分支代码(用fetch不会自动合并,更安全):git fetch origin develop - 执行rebase操作:
git rebase origin/develop - 按提示手动修复所有冲突文件,修复完成后执行:
git add <冲突文件路径> - 继续rebase流程:
git rebase --continue - 弹出提交信息编辑页直接保存关闭即可,直到命令行提示
Successfully rebased and updated <你的功能分支名>,不需要额外执行git commit,rebase流程会自动处理原有提交 - 推送到远程自己的功能分支:因为提交历史已经重写,必须加强制推送参数,如果是你独占的功能分支可以直接执行,多人协作的功能分支建议先和协作者同步后再操作:
git push origin <你的功能分支名> -f
强制推送的顾虑解答
你之前看到的多文件变更不是新增的无效变更,只是rebase后提交历史重写导致的展示差异,完全不会给develop分支引入多余提交:
- 只要你是往自己的功能分支做强制推送,完全不会影响
develop分支的代码和提交历史 - 后续你提PR合并到
develop的时候,只会带上你功能分支本身的提交,不会额外生成冗余提交,也不会出现冲突 - 担心强制推送出错的话,可以在rebase前先给当前分支打个临时标签备份:
git tag backup-before-rebase,万一操作失误可以直接回滚到标签位置
内容的提问来源于stack exchange,提问作者Helmut Granda
相关产品推荐
相关产品推荐

