2015-10-31 68 views
2

我有以下回购结构:git的更新分支后提交的主

MA ---o---o---o---T1- 
     | 
B1  \---o-- 
       | 
B2   \---o---o 

其中MAmasterB1B2有分支机构,o被提交,-是发展和T1一些时间点

现在你看到,在我做了第一次提交MA之后,我创建了一个新分支B1。然后在B1上工作,然后创建了B2并开始工作。

我的问题是,现在我做了两个更多的提交MA我已经创建了分支。但我希望整个分支发生在时间T1 - 以便我的B1有3个主提交作为基础。

的问题,夫妇在这里所以说:

  1. 是有一些(易)的方式来重新指向B1
  2. B2如果我设法repointB1会发生什么?我想保留B2B1提交为基础

回答

1

肯定的事实:变基B1,然后B2
你只需要在这样做之前,以纪念老B1状态:

git checkout B1 
git branch oldB1 
git rebase MA 

在此上演,B2是不变的:

MA ---o---o---o---T1---o B1 
     | 
oldB1 \---o 
      | 
B2   \---o---o 

现在rebase --onto将移动B2提交(在oldB1之间的一个头 - 排除 - 最多B2头 - 包括 - )。

git checkout B2 
git rebase --onto B1 oldB1 B2 
git branch -d oldB1 

这将使:

MA ---o---o---o---T1---o B1 
         | 
B2      \---o---o 
+0

谢谢。几个问题在这里:为什么我需要标记旧的B1状态?为什么我必须为B2使用'rebase --onto'?为什么不与B1相同的程序? – Anton

+0

@Anton因为'B1'提交已经应用到'master'。在理论上,一个'B2'(包括旧的'B1'提交)的rebase应该忽略那些已经应用了'B1'提交的,但是我完全绕过这个,通过做一个'rebase - B2'提交。因此,需要标记旧的“B1”,因为在第一次变形之后,“B1”已经改变了位置。 – VonC

+0

好的感谢信息 – Anton