使用变基合并后,feature分支为何显示‘超前1提交、落后1提交’?
问题描述
执行以下Git命令:
git checkout feature git add . git commit -m "done" git push
此时GitHub显示feature分支超前main分支1个提交,提交图大致如下:
*(main) \ \ - - *(feature)
随后使用Rebase and Merge选项将feature分支的拉取请求合并到main分支,但合并完成后,feature分支显示:
This branch is 1 commit ahead of, 1 commit behind main
原本预期合并后main和feature分支保持同步,提交图如下:
* \ \ - - *(main,feature)
实际提交图为:
请问为何会出现这种差异?
原因解释
核心原因是Rebase and Merge的工作机制:
当你在GitHub上用Rebase and Merge合并PR时,GitHub会把
feature分支的提交,以main分支的最新提交为基础重新生成一遍——这些新提交的哈希值和原feature分支的旧提交完全不同,之后GitHub会把main分支的指针移到这些新提交上。但远程和本地的
feature分支,仍然保留着原来的旧提交,没有被自动更新。这就造成了双向差异:main分支现在有了Rebase后的新提交,比feature分支超前1个feature分支的旧提交已经不在main的历史里了,所以显示落后1个
你预期的同步场景,只有在
feature分支也同步Rebase到新的main分支后才会出现,但Rebase and Merge操作只会更新main分支,不会自动处理feature分支。
如果要让feature和main同步,可在本地执行:
git checkout feature git rebase main git push --force-with-lease
内容的提问来源于stack exchange,提问作者Michael Xia
相关产品推荐
相关产品推荐

