我有一棵这样的历史树:
我发现我在(2)提交中合并了错误的库版本,并想从历史记录中删除(2)和(3)来获取
然后在(7)上方创建另一个子树,但理想情况下,我想用具有强制重写的提交历史记录的另一个版本的库强制替换commit(2)(就像我做了rebase -i
并用替换标记mark squash一个)
黄色提交是由子树命令创建的合并提交
红色提交是压缩的子树提交
答案 0 :(得分:0)
您可以进行一个新提交2',其中包含libray的其他版本。然后将其与1合并。这将产生一个新的提交3'。然后,您可以将5和7重新设置到3'上,从而进行新的提交5'和7'。这会给您想要的结果。
当然,提交ID的3',5'和7'与ID 3、5和7的ID有所不同,因为您不能在不更改其sha1校验和的情况下替换提交的父级之一。
答案 1 :(得分:0)
这是将2
中引入的合并替换为您想要的任何提交的一种方法:
git rebase --rebase-merges -i 1
(很明显:用sha替换1
来提交1
...)rebase -i
可能会复杂得多:## here is a sample I got, from a history with two merges :
label onto
# Branch br2
reset [new root]
pick df98219 br2
label br2
# Branch br4
reset [new root]
pick 3a30d4d br4
label br4
## the linear history for master is described here :
reset onto
merge -C f47b992 br2 # Commit 3
merge -C e198adf br4 # Commit 5
3
替换提及您的提交break
的行:...
reset onto
## remove this line to drop the faulty merge commit :
# merge -C f47b992 br2 # Commit 3
## add a 'break' instruction to stop for editing :
break
merge -C e198adf br4 # Commit 5
git rebase --continue
如果在调整基准期间遇到任何问题,则可以始终运行git rebase --abort
,然后从头开始重新启动。