Разверните функциональную ветвь на другую ветвь функции

У меня есть две (частные) ветки, над которыми я работаю.

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

Немного поработав над этими ветками, я обнаружил, что мне нужны изменения из Branch2 в Branch1. Я хотел бы перенести изменения в Branch2 на Branch1. Я хотел бы закончить со следующим:

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

Я почти уверен, что мне нужно переместить вторую ветку на первую, но я не совсем уверен относительно правильного синтаксиса и какой ветки я должен был проверить.

Эта команда даст желаемый результат?

(Branch1)$ git rebase --onto Branch1 Branch2

Ответ 1

  1. Переключиться на Branch2

    git checkout Branch2
    
  2. Примените текущие изменения (Branch2) поверх изменений Branch1, оставаясь в Branch2:

    git rebase Branch1
    

Что оставило бы вас с желаемым результатом в Branch2:

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

Вы можете удалить Branch1.

Ответ 2

Примечание: если вы были на Branch1, вы с Git 2.0 (Q2 2014) сможете ввести:

git checkout Branch2
git rebase -

Смотрите commit 4f40740 Брайан Гезяк modocache:

rebase: разрешить "-" короткую руку для предыдущей ветки

Учить переупорядочить ту же стенографию, что и checkout и merge, чтобы назвать ветвь на rebase текущей веткой; то есть, что "-" означает "ветвь, в которой мы были ранее".

Ответ 3

Я знаю, что вы попросили Ребаз, но я бы выбрал коммиты Cherry-Pick, которые я хотел переместить из Branch2 в Branch1. Таким образом, мне не нужно было бы заботиться о том, какая ветка была создана из master, и у меня был бы больший контроль над слиянием.