Технические заметки одного Евтуховича

Рассказ о серых трудовых буднях инженера программных систем

Перенести ветку в git

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

Картинка 1

Представим следующую ситуацию (она постоянно возникает у нас при разработке). У нас есть ветка master в git, а в день релиза мы создаем ветку b1. Мы добавляем какие-то изменения в ветки b1 и master. И тут вдруг (хотя слово «вдруг» не очень подходит к регулярным событям) менеджмент решает добавить что-то из master в релиз.

Картинка 2

Если комитов было мало, то можно воспользоваться git cherry-pick (если их несколько, то может помочь ключ -n). А что делать, если комитов было больше 10? Рукаме делать git cherry-pick не очень удобно. В таком случае нам поможет (в который раз) git rebase.

Итак, вначале у нас было ситуация с картинки 1.

И нам необходимо добавить часть комитов из master в b1, начиная с m10, но не все.

    git checkout master
    git checkout -b b2
    git rebase -i --onto b1 f9e4819a b2

Картинка3

Последнюю команду стоит понимать следующим образом: «прицепить к ветку b1 все между f9e4819a и b2 и назвать это b2». Если не создать ветку b2, то такая команда прицепит к b1 ветку master, вряд ли это то, что нам нужно.

Здесь f9e4819a40c58985ce183a135a473a9bfd654ff4 — это sha комита m7. Далее в открывшемся тектовом редакторе оставляем комиты, которые нам нужны. После этого мы имеем картинку 2.

Дальнейшее не составит труда даже для ребенка

    git checkout b1
    git merge b2

Ветку b2 можно теперь удалить.

    git branch -D b2

git

Комментарии