将功能分支重新设置到另一个功能分支


304

我正在使用两个(专用)功能分支。

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

11
为了回答您的问题,我将创建一个测试库,创建您显示的提交结构,然后尝试显示的命令。但是我认为您可以自己做,所以我不会做:)
Daniel Hilgarth 2013年

3
谢谢。我非常想在第一次正确使用此功能,以至于我自己都无法轻松测试它:-)
Arjen

4
我这么认为,这就是为什么我发表评论:)每当我做某事时,我不确定它是否会按照我的想法去做,所以我创建了一个测试库并在那里进行测试。或者,我创建真实存储库的副本并对该副本执行测试。
Daniel Hilgarth

注意:Git 2.0将为这种变基引入一个捷径:git rebase -。请在下面
VonC 2014年

5
小注释:此处的答案将branch2作为结果。OP想要分支1。还是我错过了什么?
Josef.B

Answers:


352
  1. 切换到Branch2

    git checkout Branch2
    
  2. 将当前(Branch2)更改应用到Branch1更改之上,并保持在Branch2中:

    git rebase Branch1
    

这将使您在Branch2中获得理想的结果:

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

您可以删除Branch1。


谢谢!在重新设置基准后删除分支时,会收到一条消息,指出分支未完全合并。我认为我可以安全地忽略此消息并强制删除吗?
Arjen

10
他不想在Branch1中进行所有更改吗?
tomasz_kusmierczyk 18-03-23

6
这似乎与他想要的相反,不是吗?
1252748 '18

1
确实,@ tomasz_kusmierczyk和@ 1252748,我也感到困惑。但是后来我意识到,git rebase留在Branch1 中的表演会重写Branch1的历史记录,以使Branch1的更改优先于从Branch2复制的更改。这将导致以下提交顺序,a - b - f - g - c' - d' - e'
eel ghEEz

1
@tomasz_kusmierczyk和1252748,这与他想要的相反,这恰恰是他想要的。分支名称无关紧要,您可以随时更改它们。
a3y3

55

注意:如果您使用Branch1,则可以使用Git 2.0(2014年第二季度)输入:

git checkout Branch2
git rebase -

提交4f40740布莱恩Gesiakmodocache

rebase:允许-上一个分支的缩写

传授与相同的速记,checkout并将merge分支命名rebase为当前分支;也就是说,“ -”表示“我们之前所在的分支”。


26
很好,但是也有点危险。有时,冗长的语言会胜出。但话又说回来,我也喜欢Java ...(-:
sthzg

3

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

a -- b -- c                  <-- Master
     \     \
      \     d -- e -- f -- g <-- Branch1 (Cherry-Pick f & g)
       \
        f -- g               <-- Branch2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.