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

Git rebase: копировать вместо перемещения

Мои ветки:

o---o  support.2013.16
     \
      o---o---o---o---o  master
                       \
                        o---o---o  hotfix/A

Мне нужно скопировать исправление /A в службу поддержки .2013.16. Я знаю о вишневом подборе, но можно ли сделать что-то вроде

git rebase --onto support.2013.16 master hotfix/A

но не перемещая ветвь, но вместо этого скопировав ее?

4b9b3361

Ответ 1

Git rebase действительно копирует исходную ветвь в новую; но из-за того, что он перемещает голову ветки, это похоже на ход, а не на копию. Если вы использовали git branch для добавления дополнительной ветки ветки в исходную ветвь, у вас все равно будет легкий доступ к исходной ветке после того, как git rebase выполнил переустановленную копию. Итак, в вашем примере

git branch rebased-A hotfix/A
git rebase --onto support.2013.16 master rebased-A

оставляет вас с

      o---o---o  rebased-A (hotfix/A')
     /
o---o  support.2013.16
     \
      o---o---o---o---o  master
                       \
                        o---o---o  hotfix/A

Ответ 2

Вы можете создать новую ветку:

git checkout -b hotfix/A-support hotfix/A

и замените его. Итак, у вас будет два ветки. Возможно, вы можете отказаться от ветки после ее объединения в ветвь support.

В качестве альтернативы вы можете переустановить hoftix/A на git merge-base support.2013.16 master, а затем вы можете легко объединить hotfix/A в обе ветки. Это даст вам более красивую историю, никаких дубликатов не будет.