变基并移动父分支

Rebase and move parent branches along

TLDR 我希望父分支(在线性分支中)在变基期间与新提交一起移动。


初始设置:多个功能分支(彼此重叠)每个都在等待合并到主分支中

A--B--C--D <-master
   \
    E--F--G--H--I--J--K--L
       ^     ^     ^     ^
       |     |     |     feature_d
       |     |     feature_c
       |     feature_b
       feature_a

进行审核,将新提交 M 添加到 feature_a,然后将其合并到 master:

A--B--C--D--N <-master
   \       /
    E--F--M <- feature_a
       \
        G--H--I--J--K--L
           ^     ^     ^
           |     |     feature_d
           |     feature_c
           feature_b

这是我要进行变基的地方。

期望的结果:变基 feature_d 以掌握并移动所有父分支:

A--B--C--D--N <-master
   \       / \
    E--F--M   G'--H'--I'--J'--K'--L'
                  ^       ^       ^
                  |       |       feature_d
                  |       feature_c
                  feature_b

我知道如何做到这一点的方法是 "manual",即 feature_d 的正常变基,然后移动每个分支指针:

git checkout feature_d
git rebase master
git branch -f feature_b H'
git branch -f feature_c J'

这需要通过他们的 sha 手动搜索和引用新提交。它需要额外的注意并且容易出错。我希望有一个自动化的过程,像这样:

git checkout feature_d
git rebase master --magic-option-move-branches-to-new-commits

这个解决方案不是一个神奇的命令,但它确实避免了手动命名提交。将每个分支重新设置在其父分支之上,从最旧的分支开始:

git checkout feature_b
git rebase master

git checkout feature_c
git rebase feature_b

git checkout feature_d
git rebase feature_c

我没想到这会奏效。以下是其工作原理的解释: