Git — Перебазирование двух ветвей против master

#git

#git

Вопрос:

У меня есть три ветви: master, branchA и BranchB. BranchB ответвляется от branchA и в конечном итоге будет объединен с branchA.

                                     K---L---M---N---O branchB
                                   /
              E---F---G---H---I---J  branchA
             /
A---B---C---D  master
  

Мне нужно было получить изменения от master в обеих ветвях, поэтому я выполнил следующее

 branch-a> git fetch origin master
branch-a> git rebase -i origin/master
branch-a> git push -f 
  

Это правильно перебазировало branchA против master, но у меня возникли проблемы с BranchB. Попытка перебазировать его на branchA (который теперь имеет изменения от master) работает не так, как я надеялся. Я получил огромное количество конфликтов слияния, когда должно быть 0, поэтому я прервал перебазирование. С небольшими потерями.

Когда я смотрю на свой PR для BranchB (базовой ветвью которого является A), теперь он показывает историю фиксации для branchA И B, когда это должно быть просто B.

Ответ №1:

Это то, что я бы сделал:

 git rebase --onto=branchA branchB~3 branchB
  

Вы могли бы сделать все это одним выстрелом, подобным этому:

 git checkout branchB
git rebase master
git branch -f branchA branchb~3
  

Комментарии:

1. Должно ли это ‘3’ быть фактическим количеством коммитов в BranchB?

2. Отредактировал сообщение, чтобы отразить фактическое количество коммитов и прояснил историю коммитов.

3. @SamPinheiro branchB~3 имел в виду G вашу диаграмму, пока вы не исказили ответ, изменив диаграмму.

4. Я не хочу ничего нарушать, поэтому мне просто нужен точный ответ. В предыдущем примере были branchA и B с одинаковым количеством коммитов, поэтому я хочу убедиться, что число правильное (а также где мне нужно запустить команду)

5. Теперь это branchB~5