Git:多个子功能分支依赖的变基

3
我对于 git rebase --onto 功能有一个问题。
我的问题与此页面中描述的问题非常类似(链接在此:https://coderwall.com/p/xzsr9g/rebasing-dependent-branches-with-git)。
该页面的作者的分支历史如下:
master ---A---B---C
           \
feature1    D---E---F
                 \
feature2          G---H

这位用户想要将两个分支基于主分支进行重定位,以便分支历史记录如下:

master ---A---B---C
                   \
feature1            D'--E'--F'
                             \
feature2                      G'--H'

这可以通过链接文章中描述的命令来实现:
git rebase --onto feature1 feature1@{1} feature2

我有一个类似的问题,但是我有两个依赖特性分支而不是一个。

我的当前分支历史如下:

master       ---A---B---C
                 \
intermediate      D---E---F
                       \
feature1                G---H
                         \
feature2                  I---J

我想知道是否有可能执行rebase操作,使得我的历史记录变成以下形式:
master       ---A---B---C
                         \
intermediate              D'---E'---F'
                                     \
feature1                              G'---H'
                                       \
feature2                                I'---J'

我能否同时进行两个分支的有依赖的变基操作?
如果可以,这种操作的语法是什么?
非常感谢您的回复!

作为一个简单的解决方法,您可以在第一步中重新设置intermediate,然后是feature1和最后是feature2 - Michał Walenciak
1
这样做不会遇到一个问题吗?feature 1和intermediate有相同的历史,但是提交哈希不同?将feature 1变基到intermediate会导致多个重复提交被应用,这可能很难解决。或者我对情况的理解有误? - Dalaigh88
H' 不应该是 I' 的父级吗? - evolutionxbox
@tkruse,这是一个足够公正的回答,对于99%的情况可能有效。但我只想要一种能够确保每次都能工作的方法。那些“可能”有效的过程让我感到非常害怕,因为这种不可预测性往往会在重要的部署或演示日出现... :) - Dalaigh88
这是一个相当难以解决的问题。我曾经开始写一个Python脚本来解决它,但最终放弃了,因为那个糟糕的90%方法已经能够工作了,而我没有时间写一个100%版本。 - torek
显示剩余4条评论
1个回答

0

Git rebase branch with all parent branches (or dependent sub-branches)可以让你接近解决问题,但是它是一个稍微不同的问题。链接的问题有一个顶级分支,它完全包含了所有其他分支。

对于您的用例,您必须手动逐个重新基于分支进行操作:

git rebase master intermediate
git rebase intermediate feature1
git rebase "G'" feature2

Git通常足够聪明,能够判断两个提交是否包含相同的补丁,并跳过这些提交。这可以通过--reapply-cherry-picks选项来控制。

如果这对您不起作用,您可以在运行git rebase时完全显式地指定要重新定位的提交范围和重新定位的位置:

git rebase --onto master master intermediate
git rebase --onto intermediate E feature1
git rebase --onto "G'" G feature2

这很繁琐,但在所有情况下都应该有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接