如何将新分支提交rebase到已删除分支的旧提交上?
Git分支历史重构操作方案
初始需求(提交3对接提交1)操作步骤
你可以通过git rebase --onto命令实现提交父节点的修改,操作如下:
- 先查询对应提交的哈希值,记录三个关键节点的哈希:
- 提交1的哈希(记为
HASH1) - 提交2的哈希(记为
HASH2,是提交3的原父节点) - 新dev分支上提交3的哈希(记为
HASH3)
- 提交1的哈希(记为
- 执行rebase命令修改父节点:
git rebase --onto HASH1 HASH2 HASH3 - 此时操作后生成的新提交就是父节点为提交1的提交3,你可以将当前HEAD命名为dev分支:
git checkout -b dev
操作完成后即可得到你期望的分支结构,master分支的历史不会受到影响。
补充场景(newdev分支对齐dev分支历史)操作步骤
如果希望newdev分支和调整完成的dev分支历史完全一致,分两种情况处理:
- 若newdev上没有需要保留的独有改动,直接硬重置即可:
操作后newdev的提交历史会和dev完全相同。# 切换到newdev分支 git checkout newdev # 硬重置到dev分支的最新提交 git reset --hard dev - 若newdev上存在需要保留的独有改动,将独有提交重新rebase到dev顶端即可:
# 切换到newdev分支 git checkout newdev # 将newdev上dev分支之后的提交全部迁移到dev顶端 git rebase dev
注意:如果分支已经推送到远程仓库,修改历史后需要加
-f参数强制推送,该操作会覆盖远程分支的历史,建议先和协作者确认后再执行。
内容的提问来源于stack exchange,提问作者Zapoux
相关产品推荐
相关产品推荐

