2015-10-31 3 views
2

У меня есть следующая структура репо:мерзавец филиал обновления после фиксации на мастер

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

где MA является master, B1 и B2 филиалы, o является совершал, - является разработка и T1 является какой-то время точкой

Теперь вы видите, что после того, как я сделал первый коммит на MA, я создал новую ветку B1. Затем работал на B1, затем создал B2 и работал над ним.

Моя проблема в том, что я сделал еще две попытки на MAпосле Я создал ветки. Но я хочу, чтобы все ветвление происходило во время T1 - так что у моих B1 есть все 3 главных коммита в качестве основы.

Так пару вопросов здесь:

  1. Есть некоторые (простой) способ RepointB1?
  2. Что произойдет с B2, если мне удастся repointB1? Я хочу, чтобы сохранить тот факт, что B2 имеет фиксации на B1 в качестве основы

ответ

1

Sure: перебазироваться 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 HEAD - исключение - до B2 HEAD - включено -).

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? Почему я должен использовать 'rebase -onto' для B2? Почему не такая же процедура, как для B1? – Anton

+0

@Anton Поскольку коммиты 'B1' уже применяются к' master'. Теоретически, rebase 'B2' (который будет включать в себя старые коммиты B1') должен игнорировать те уже применяемые коммиты' B1', но я полностью обходил это, выполняя 'rebase -onto', который фокусируется только на' B2' совершает. Следовательно, необходимо отметить старый 'B1', так как после первой перезагрузки' B1' изменил местоположение. – VonC

+0

ok спасибо за информацию – Anton

Смежные вопросы