Git变基解决冲突后推送被拒,拉取又出现冲突该如何处理?
问题根因
- 变基(rebase)操作会重写你本地
AddLoggingStorageAccounts分支的提交历史:你之前在该分支的1次提交会被生成全新的提交哈希值,和远端仓库存储的同分支提交历史完全分叉 - 执行普通
git push时,远端发现本地分支历史不是远端分支历史的快进版本,因此直接拒绝推送 - 后续执行的
git pull默认会触发merge操作,把远端的旧提交历史和你本地rebase后的新历史合并,自然会再次触发已经解决过的冲突
正确操作步骤
第一步:中止当前错误的pull合并
首先执行以下命令放弃这次错误的merge操作,回到pull之前rebase完成的干净状态:
git merge --abort
执行完可以用git log确认,能看到你rebase后的那1次提交是基于最新的origin/dev即可。
第二步:强制推送本地重写后的分支到远端
因为你是独自在AddLoggingStorageAccounts特性分支上开发,没有其他人在该分支提交代码,直接强制推送覆盖远端的旧历史即可,执行命令:
git push --force origin AddLoggingStorageAccounts
注意:该强制推送命令仅可用于你个人独自开发的特性分支,绝对不要在dev、main这类多人共用的公共分支上执行强制推送。
如果团队Git仓库配置了分支保护,不允许直接强制推送,可以改用更安全的force-with-lease参数,该参数会校验远端的AddLoggingStorageAccounts分支有没有其他人提交过新代码,避免误覆盖别人的提交:
git push --force-with-lease origin AddLoggingStorageAccounts
后续操作建议
- 之后你再在该分支开发,推送前只需要先拉取最新的dev分支,再rebase一次解决冲突后,强制推送到远端即可
- 等功能开发完成,发起PR/MR合并到dev分支时,走普通合并流程即可,不需要做特殊处理
内容的提问来源于stack exchange,提问作者Alexander Farber
相关产品推荐
相关产品推荐

