将git rebase到不同的分支

6

我有以下情况:

Master ---X---X---X
               \
   Alpha branch A1---A2---A3---A4---A5---A6
                      \              \
                       \  beta branch B1---B2
                        \
              My Branch M1---M2---M3

我想将我的分支移动到“B2”,最终结果如下:

Master ---X---X---X
               \
   Alpha branch A1---A2---A3---A4---A5---A6
                                     \
                          beta branch B1---B2
                                            \                             
                                  My Branch M1---M2---M3

为了做到这一点,我应该在我的分支中执行 git rebase beta,还是像这样添加选项--ontogit rebase --onto beta alpha My?我已经阅读了文档,但仍然没有弄清楚区别...
2个回答

8
这里有四种方法可以实现它:
  • git rebase <branch>

    Reset checked out branch to <branch>, apply differences (between previous HEAD and the common ancestor) and commit.

    git checkout my
    git rebase beta
    
  • git rebase <branch1> <branch2>

    Reset <branch2> to <branch1>, apply differences (between previous <branch2> and the common ancestor) and commit.

    git rebase beta my
    
  • git rebase --onto <branch1> <branch2>

    Reset checked out branch to <branch1>, apply differences (between previous HEAD and <branch2>) and commit.

    git checkout my
    git rebase --onto beta A2
    
  • git rebase --onto <branch1> <branch2> <branch3>

    Reset <branch2> to <branch1>, apply differences (between previous HEAD and <branch2>) and commit.

    git rebase --onto beta A2 my
    

2
如果你已经处于所在分支的顶部,那么只需要输入git rebase betagit rebase B2即可。不同之处在于使用--onto选项可以更好地控制复杂情况……比如相反的情况:想要将beta分支移到我的分支顶端。如果你已经位于beta分支的顶部并运行git rebase my-branch,那么你将得到M1--M2--M3--A3'--A4'--A5'--B1'--B2'(因为从分支分叉的点(A2)开始,修订版本A3到A5(都包括)也必须包含在简单的rebase中)。在这种情况下,你需要运行:git rebase --onto my-branch alpha-branch beta-branch。希望这能解决问题。

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