2015-10-31 71 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