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
но не перемещая ветвь, но вместо этого скопировав ее?
Ответы
Ответ 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
в обе ветки. Это даст вам более красивую историю, никаких дубликатов не будет.