我正在处理两个(私人)功能分支。
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
答案 0 :(得分:285)
切换到Branch2
git checkout Branch2
在Branch1更改之上应用当前(Branch2)更改,保留 在Branch2:
git rebase Branch1
哪会在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 4f40740见Brian Gesiak modocache
:
rebase
:允许&#34; -
&#34;前一个分支的简写教授与
checkout
和merge
相同的简写,将分支命名为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了。