变基并移动父分支
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
我没想到这会奏效。以下是其工作原理的解释:
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
我没想到这会奏效。以下是其工作原理的解释: