如何在存在子分支的Git分支中压缩中间提交?
解决分支历史修改后DEV分支关联问题的步骤
你的问题核心是:交互式压缩提交后,main分支生成了新的提交链,但DEV分支仍基于旧的历史节点,需要通过**变基(rebase)**将DEV的提交迁移到新的历史链上。
操作步骤:
切换到
DEV分支:git checkout DEV执行变基操作,将
DEV的提交(K、L、M)迁移到新链的G'节点(即新main分支中对应原G的提交):- 新
main的提交链是A--N--F'--G'--H'--I'--J',G'是main往前数第3个提交,用相对引用表示为main~3。 - 旧链中
DEV的分叉点是原提交F,把DEV中所有在F之后的提交迁移到新基底上:git rebase --onto main~3 F DEV - 若你知道原
F的提交哈希(如<old-F-hash>)和新G'的提交哈希(如<new-G'-hash>),也可以用更精确的命令:git rebase --onto <new-G'-hash> <old-F-hash> DEV
- 新
验证结果:
执行后仓库结构会变为:A--N--F'--G'--H'--I'--J' \ K'--L'--M' main -> J' DEV -> M'(注:K'、L'、M'是变基后重新生成的提交,内容与原K、L、M一致,仅父节点变为新的G')
注意事项:
- 如果
main分支已推送到远程仓库,需强制推送更新(仅确认无其他协作者基于旧main工作时执行):git push origin main --force-with-lease - 变基
DEV后,若要推送到远程,同样需要强制推送DEV分支:git push origin DEV --force-with-lease
内容的提问来源于stack exchange,提问作者TSDrake
相关产品推荐
相关产品推荐

