在分支和合并之后,我删除了分支,但是git图仍然显示了旧分支中的所有提交,现在是未命名的。
A - B - I - J - - - - - K - L - M (master)
\ /
\ E - F - G - H /
我想删除提交E、F、G和H,因为旧的分支已经不存在了。
编辑
只是澄清一下,我的目标是改变师父的历史。最后的树应该是:
A - B - I - J - K - L - M (master)
所以K不应该是一个3向合并提交,而是一个标准提交,J是它的父提交。
如果这是不可能的,也许我可以有以下内容:
A - B - I - J - K' - L' - M' (master)
3条答案
按热度按时间czfnxgou1#
你需要重新创建合并提交作为一个压缩合并(即不是真实的的合并)。确保你没有任何未提交的更改,或者先把它们藏起来。
给你
挤压合并旧分支的最后一次提交:
然后复制真实的合并后发生的提交:
给你留下一个最后的历史记录:
只有来自master的提交是可访问的,所以我们可以忽略其余的:
disho6za2#
您可以使用
--first-parent
来不查看来自未命名分支的合并。git log --oneline --graph --all --first-parent
。如果你更喜欢这个序列,也许可以添加--date-order
。bejyjqdl3#
您需要撤消合并,然后再次添加L和M,但您可以根据需要使用挤压合并。
这将压缩从分支到K '的所有改变。
而且,正如你正确地理解的那样,这将改变主文件的历史,这样你就需要在之后创建L'和M',然后强制推送。
历史将看起来像这样:
如果你出于任何原因根本不需要合并,你需要在J之上重定分支更改的基,这样它们就可以直接添加到主分支。使用rebase-merging,你基本上是在B和你在分支上的第一次提交之间应用I和J。之后,您可以将分支合并到main(快进),历史将如下所示:
使用rebase合并master到你的分支,然后将你的分支压缩合并(快进)到master的组合,你会得到你想要的: