从堆叠的功能分支重新定位

时间:2013-01-23 03:08:28

标签: git git-rebase

我有两个分支机构。一个是从master分叉的,第二个是从master分叉的,但取决于第一个分支的变化。我想提交我的第一个分支进行审核。批准后,它将被重新授予主人。

有没有办法在没有master中的第一个变更集的情况下开始在第二个分支上工作?我最初的想法是从第一个分支重新定义第二个分支,然后当第一个分支重新定位到主分支时,将第二个变换集重新设置为主分支。这可行吗?如果没有,那么正确的方法是什么?

3 个答案:

答案 0 :(得分:2)

免责声明:这假设Branch2是您的存储库的本地存储,或者它是公开的,但没有其他人可以从中进行处理。如果有人试图对其进行操作并且您执行下面的操作,则可能会引起各种麻烦。


您应该能够使用rebase命令的--onto参数完成分支操作。它非常强大,并且可以让你(至少尝试)在几乎任何其他提交的基础上移动任何范围的提交。

根据您的情况,我们假设您有一个类似于此的图表

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

并且您希望将其变为类似下面的内容,以便在Branch2等待合并批准时继续使用Branch1

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

应该可以使用命令

来实现
git rebase --onto branch1 master branch2

Branch1合并到master后,假设存储库看起来像这样

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

然后,您可以使用以下命令将Branch2重新置于master

git rebase --onto master branch1 branch2

导致存储库看起来像这样

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

抱歉Branch2在顶部和底部之间不断跳跃。

答案 1 :(得分:0)

如果你的意思是你需要从分支2中的分支1进行更改,你可能只想把你需要的更改从分支1 git cherry-pick转移到分支2中。这正是你正在寻找的需要任何复杂的rebase方案。

答案 2 :(得分:0)

您似乎正在使用gerrit进行代码审查。

你可以这样做:

当分支1被提交并合并到回购中时,您可以这样做:

git fetch origin

并直接重新绑定来自branch1的更改,例如git rebase origin / master

BR, 添