Git拉取后Rebase异常:合并提交H未显示的问题求助
Git Rebase 交互式界面不显示合并提交的解决思路
问题场景
提交历史结构:
feat E(PR1) ---------> H(merge commit) / / \ (on trouble!) master A-B - C - - - - - - -> F \ /(merged) /(merged) tmp ... G - - - - - - - -K
基于master分支的C节点创建feat分支,在E节点提交PR后,master合并其他PR到F节点。执行git pull master同步后产生合并提交H,随后执行git rebase -i 0x05(0x05为C节点哈希)时,交互式界面仅显示提交E,无法看到合并提交H,无法完成E和H的合并压缩操作。
解决思路
1. 让合并提交显示在交互式rebase界面
默认git rebase会线性化提交历史,自动跳过合并提交。若需要在交互式界面中显示合并提交,需添加--rebase-merges参数:
git rebase -i --rebase-merges 0x05
执行后,交互式界面会包含合并提交H,可修改操作指令(如将E和H的指令改为squash)完成提交合并。
2. 优化同步分支流程(避免生成合并提交)
从根源上避免产生合并提交H:同步master分支时,不要用默认触发merge的git pull master,改用rebase方式同步:
git fetch origin git rebase origin/master
该操作会直接将feat分支的E提交变基到master的F节点上,解决冲突后提交即可保持线性历史,后续执行git rebase -i 0x05就能看到所有需要压缩的提交。
3. 将合并提交转换为普通提交(适合无需保留合并关系的场景)
若已生成合并提交H,可先将其转换为普通提交再处理:
# 回退到合并提交H的前一个节点E git reset HEAD^ # 此时工作区为合并后的状态,直接重新提交 git add . git commit -m "合并master后的feat修改" # 执行交互式rebase git rebase -i 0x05
新提交会替代原合并提交H,此时rebase界面可看到该新提交与E,方便合并压缩。
内容的提问来源于stack exchange,提问作者Justin Seo
相关产品推荐
相关产品推荐

