Github中staging与master分支始终无法同步问题求助
问题:staging与master分支循环无法同步的原因
我有两个分支staging和master,初始状态完全同步无差异。在GitHub上执行了以下操作:
- 创建名为
Tim的新分支 - 对代码进行编辑修改
- 将修改提交到
Tim分支 - 把
Tim分支合并到staging分支 - 再将
staging分支合并到master分支
完成操作后切换到staging分支,发现它和master不同步:master领先一个提交,该提交是合并staging时生成的记录。如果我把master同步到staging,master又会显示落后一个提交,如此循环,两个分支始终没法对齐。
相关操作截图说明:
- 截图1:展示分支间的提交差异状态
- 截图2:呈现合并
staging到master后的分支情况 - 截图3:显示将
master合并回staging后的分支变化 - 截图4:展示循环差异的最终分支状态
问题根源
这是因为你合并时用了Git默认的非快进合并,每次合并都会生成一个新的合并提交。
当你把staging合并到master时,Git会创建一个新的合并提交(也就是master领先的那个提交),此时master的提交历史比staging多了这个合并节点。
如果你再把master合并回staging,Git又会为这次合并生成新提交,导致staging的提交历史又多了一个节点,反过来master就显得落后,如此往复形成循环。
解决办法
如果目标是让staging和master保持完全一致的提交历史,有两种可行方案:
使用快进合并
合并时添加--ff-only参数,只允许快进合并,不会生成新的合并提交:git checkout master git merge --ff-only staging这种方式要求
staging是master的直接上游,没有分叉的提交历史,适合你这种从staging向master合并的场景。重置分支对齐历史
直接把落后的分支重置到领先分支的位置,完全对齐提交历史:# 若master领先staging,将staging重置到master的状态 git checkout staging git reset --hard master # 若staging是远程分支,需强制推送(操作前务必和团队成员确认) git push --force origin staging这种方式会改写分支的提交历史,适合个人开发或已和团队沟通确认的场景。
内容的提问来源于stack exchange,提问作者McPace
相关产品推荐
相关产品推荐

