将master rebase到已推送且合入远程的特性分支会有什么行为?
本地master rebase到FB分支的运行行为
核心结论
Git会自动跳过两个分支共有的FBC1、FBC2提交,仅重放master独有的提交,无冲突的情况下最终会生成线性的提交链路。
具体运行流程
- Git首先对比两个分支的提交差异,提取仅存在于master分支、不存在于FB分支的提交:MC1、MC2、MC3、MC4,FBC1、FBC2因为提交内容、变更完全一致会被直接跳过,不会重复处理。
- Git自动切换HEAD到FB分支的最新提交(即FBC2),按顺序逐个应用提取到的差集提交:
- 先应用MC1,无冲突的话会生成新的提交(提交哈希会变化,因为父提交从原来的CC变为FBC2)
- 依次按顺序应用MC2、MC3、MC4,每一步无冲突即可生成对应新提交
- 所有提交应用完成后,本地master分支指针会移动到最后一个新提交的位置,最终的master提交链路为 CC-FBC1-FBC2-MC1'-MC2'-MC3'-MC4',带
'标识的为重放后哈希发生变化的新提交。
异常处理说明
如果重放任意提交时出现代码冲突,Git会暂停rebase流程,提示手动解决冲突:
- 冲突解决完成后执行
git add <冲突文件路径>标记冲突已解决- 执行
git rebase --continue继续后续提交的重放- 如果需要中途终止rebase,执行
git rebase --abort即可将master分支恢复到rebase前的状态
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

