Подтвердить что ты не робот

Случайно разветвленная неправильная ветка, и когда я хочу объединиться в мастера, мне нужно объединить обе ветки

Итак, я создал ветку другой ветки, которую я уже создавал, и теперь, когда я пытаюсь объединить ветки в master, я столкнулся с ситуацией, когда мне нужно объединить обе ветки.

Вот диаграмма

Master- >

 ->Branch 1  -> Branch 2

Я хочу иметь возможность объединить только изменения в ветке 2 на master без необходимости объединять изменения в ветки 1, если это имеет смысл. Я заглянул в reset и вернул, но похоже, что эти вещи удалят все изменения, которые я сделал с помощью ветки 2. Любые идеи?

Спасибо

4b9b3361

Ответ 1

Попробуйте git rebase --onto со следующим синтаксисом:

Чтобы внести изменения Branch2 в мастер без включения Branch1

git rebase --onto master branch1 branch2

Соответствующий вывод из git help rebase:

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

Сначала давайте предположим, что ваша тема основана на ответвлении. Например, функция, разработанная в теме, зависит от некоторых функций, которые можно найти в следующем.

              o---o---o---o---o  master
                   \
                    o---o---o---o---o  next
                                     \
                                      o---o---o  topic

Мы хотим сделать тему разветвленной от ветки мастера; например, потому что функциональность, от которой зависит тема, была объединена в более стабильную основную ветку. Мы хотим, чтобы наше дерево выглядело так:

              o---o---o---o---o  master
                  |            \
                  |             o'--o'--o'  topic
                   \
                    o---o---o---o---o  next

Мы можем получить это с помощью следующей команды:

git rebase --onto master next topic

Имейте в виду риски и недостатки перебазирования, упомянутые здесь: http://git-scm.com/book/en/Git-Branching-Rebasing.

Ответ 2

Один из способов сделать это, используйте cherry-pick. Сделайте git log branch2 и найдите требуемый идентификатор фиксации, а затем переключитесь на ветвь master с помощью git checkout master, затем используйте git cherry-pick <commit_id>

Подробнее см. в этом сообщении

Как слить конкретную фиксацию в Git