执行Git rebase后无法推送至远程仓库,求原因与解决方法
问题原因
你执行git rebase master后,本地feature分支的提交历史被改写了:rebase会把你在feature上的所有提交,基于更新后的master重新生成新的提交对象,相当于你的本地分支拥有了一套全新的提交历史。
而远程的feature分支仍然保留着你之前推送的旧提交历史,此时本地分支和远程分支的提交历史已经完全分叉——Git无法通过“快进”方式合并两者,所以会提示本地分支“落后”于远程(这不是真的落后,只是历史不一致导致的判断)。
解决方法
因为这是你个人开发的feature分支(未合并到上游、无其他协作者),可以用安全强制推送来覆盖远程分支的旧历史:
- 优先推荐更安全的命令:
这个命令会先检查远程分支是否有你未同步的新提交(比如其他人偷偷推送了修改),如果没有才会执行强制推送,避免误覆盖他人修改。git push --force-with-lease origin squares-of-id - 若确定远程分支只有你自己在操作,也可以用简化的强制推送:
git push --force origin squares-of-id
注意事项
如果该feature分支有其他协作者共同开发,强制推送会导致他们的本地分支与远程分支历史不一致,需要他们执行git pull --rebase来重新同步,所以仅在分支独属于你自己时使用上述方法。
内容的提问来源于stack exchange,提问作者IsAdisplayName
相关产品推荐
相关产品推荐

