Rebase功能分支到另一个功能分支

时间:2013-02-15 11:09:24

标签: git git-rebase feature-branch

我正在处理两个(私人)功能分支。

a -- b -- c                  <-- Master
     \     \
      \     d -- e           <-- Branch1
       \
        f -- g               <-- Branch2

在这些分支上工作一段时间后,我发现我需要Branch1中Branch2的更改。我想将Branch2中的更改重新绑定到Branch1上。我想最终得到以下结论:

a -- b -- c                  <-- Master
           \
            d -- e -- f -- g <-- Branch1

我很确定我需要将第二个分支重新绑定到,但是我不完全确定正确的语法以及我应该检查的分支。

此命令会产生所需的结果吗?

(Branch1)$ git rebase --onto Branch1 Branch2

4 个答案:

答案 0 :(得分:285)

  1. 切换到Branch2

    git checkout Branch2
    
  2. 在Branch1更改之上应用当前(Branch2)更改,保留 在Branch2:

    git rebase Branch1
    
  3. 哪会在Branch2中留下您想要的结果:

    a -- b -- c                      <-- Master
               \
                d -- e               <-- Branch1
               \
                d -- e -- f' -- g'   <-- Branch2
    

    您可以删除Branch1。

答案 1 :(得分:48)

注意:如果您在Branch1,您将使用Git 2.0(2014年第2季度)输入:

git checkout Branch2
git rebase -

commit 4f40740Brian Gesiak modocache

rebase:允许&#34; -&#34;前一个分支的简写

  

教授与checkoutmerge相同的简写,将分支命名为rebase当前分支;就是那个&#34; -&#34;意味着&#34;我们之前所在的分支&#34;。

答案 2 :(得分:1)

我知道您要求Rebase,但是我想让Cherry-Pick代替我想从Branch2移到Branch1的提交。这样,我就不必在乎何时从master创建哪个分支,并且对合并有更多控制权。

a -- b -- c                  <-- Master
     \     \
      \     d -- e -- f -- g <-- Branch1 (Cherry-Pick f & g)
       \
        f -- g               <-- Branch2

答案 3 :(得分:0)

我知道你已经接受了答案,但是如果你想完全按照你的要求去做(在 Branch1 上添加 Branch2 的提交,同时留在 Branch1 上)你可以这样做:

git checkout Branch1
git cherry-pick master..Branch2

你会得到这个。

a -- b -- c                      <-- Master
           \
            d -- e -- f' -- g'   <-- Branch1 (current)
           \
            f -- g               <-- Branch2

这将优先选择 Branch2 上的每个提交,以便在 Branch1 上进行。然后就可以删除Branch2了。