调整基础并沿其移动父分支

时间:2020-03-01 02:38:28

标签: git git-rebase

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

我知道如何执行此操作的方法是“手动”,即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

1 个答案:

答案 0 :(得分:0)

此解决方案不是一个魔术命令,但它确实避免了手动命名提交。从最旧的分支开始,在每个分支的父分支之上重新建立其基础:

git checkout feature_b
git rebase master

git checkout feature_c
git rebase feature_b

git checkout feature_d
git rebase feature_c

我没想到这行得通。这是它起作用的解释:Git rebase skipping identical commits