Перенести ветку в git
Представим следующую ситуацию (она постоянно возникает у нас при разработке). У нас есть ветка master в git, а в день релиза мы создаем ветку b1. Мы добавляем какие-то изменения в ветки b1 и master. И тут вдруг (хотя слово «вдруг» не очень подходит к регулярным событям) менеджмент решает добавить что-то из master в релиз.
Если комитов было мало, то
можно воспользоваться 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
Последнюю команду стоит понимать следующим образом: «прицепить к ветку b1 все между f9e4819a и b2 и назвать это b2». Если не создать ветку b2, то такая команда прицепит к b1 ветку master, вряд ли это то, что нам нужно.
Здесь f9e4819a40c58985ce183a135a473a9bfd654ff4 — это sha комита m7. Далее в открывшемся тектовом редакторе оставляем комиты, которые нам нужны. После этого мы имеем картинку 2.
Дальнейшее не составит труда даже для ребенка
git checkout b1
git merge b2
Ветку b2 можно теперь удалить.
git branch -D b2