Git:如何删除提交的 parent 提交

Git: How to remove commit's parent commit

我使用 BFG 在存储库中执行了一些清理,结果以一些不需要的工件结束。在回购历史的某个时刻,我有以下设置:

... -> A -> B -> C -> ... -> X -> Y -> Z -> ... -> HEAD/master
             \                   /
               P -> Q ----------

(both X and Q are Y's parents)

我发现 P 和 Q 现在都是 emptydetached 提交。 Y 是一个合并提交,它也是空的(没有更改,只是有一个额外的 parent)。在 C 和 X 之间有很多提交(包括分支和合并,none 与 P->Q "branch".

我想完全删除 P->Q 提交和链接,因为它们根本不包含任何更改。结果如下:

... -> A -> B -> C -> ... -> X -> Y -> Z -> ... -> HEAD/master

我在谷歌上搜索过如何使用变基、替换、filter-branch 编辑 parents,但我很难做到这一点(我是新手 git用户)。

运行 git rebase --onto X Z 将 Z 重新应用到 X 上(跳过 y)。