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

问题描述 投票:0回答:5

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

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

在这些分支上工作了一段时间后,我发现我需要从 Branch2 到 Branch1 的更改。我想将 Branch2 中的更改重新设置为 Branch1。我想以以下结尾:

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

我很确定我需要将第二个分支变基到第一个,但我不完全确定正确的语法以及我应该签出哪个分支。

这个命令会产生预期的结果吗?

(Branch1)$ git rebase --onto Branch1 Branch2
git git-rebase feature-branch
5个回答
470
投票
  1. 切换到 Branch2

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

    git rebase Branch1
    

这会让你在 Branch2 中得到想要的结果:

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

您可以删除 Branch1.


71
投票

注意:如果你在

Branch1
,你将使用 Git 2.0(2014 年第二季度)能够输入:

git checkout Branch2
git rebase -

在这种情况下,作为

-
参数的
rebase
表示“我们之前所在的分支”。参见 Brian Gesiak 的 commit 4f40740
modocache

rebase
:允许“
-
”简写为上一个分支

教 rebase 与

checkout
merge
相同的速记,将分支命名为
rebase
上的当前分支;也就是说,“
-
”的意思是“我们之前所在的分支”。

谨慎使用此功能,因为它不太明确,一个小错误可能会导致状态混乱。


21
投票

这个解决方案应该完全按照要求执行(在 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.


11
投票

我知道你要求变基,但我会 Cherry-Pick 我想从 Branch2 移动到 Branch1 的提交。这样,我就不需要关心什么时候从 master 创建了哪个分支,并且我可以更好地控制合并。

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

0
投票

我是不是误解了这个问题?我的直觉是像这样使用

rebase
--onto
标志:

git rebase --onto branch1 master branch2

变基前:

* 6263580 (HEAD -> branch2) add g
* c802c88 add f
| * c80cfb0 (branch1) add e
| * aea5708 add d
| * 2e522fe (master) add c
|/  
* 0613527 add b
* e2a0c4d add a

变基后:

* 7f6a363 (HEAD -> branch2) add g
* 4cbab60 add f
* c80cfb0 (branch1) add e
* aea5708 add d
* 2e522fe (master) add c
* 0613527 add b
* e2a0c4d add a

这使得它变得明确和清晰,哪些提交集正在重新基于什么

© www.soinside.com 2019 - 2024. All rights reserved.