Рано или поздно в жизни каждого ммм… мальтузианина, допустим.. наступает момент, когда нужно учиться по-человечески работать с гитом. В частности заниматься садоводством — выращивать ветки, прививать их, подстригать и проч.
Ну я садовод-любитель и все всегда пушил в мастер. На танке в магазин за хлебом ездил так сказать.
Но настала пора, когда важно, что побеги росли в нужную сторону… Допустим мы сделали форк (на сайте гитхаба кнопку нажать справа сверху) и..
1) клонировали его на локалку
git clone git@github.com:<my_username>/<fork>.git
2) подключились к основной репе (чтобы потом накатывать от туда обновы)
или
git clone https://github.com/<my_username>/<fork>.git
git remote add upstream git://github.com/<user>/<repka>.git
3) сделали ветку
git branch <branch_name>
4) сделали ветку активной
git checkout <branch_name>
(можно сразу сделать ветку и сделать ее активной:
git checkout -b <branch_name>
)
5) ну и напрограммировали крутые фичи у себя на локалке. готовим коммит:
git add <file_name>
git commit -m "<comment>"
6) затестили и публикуем в своей ветке на удаленку:
git push -f origin <branch_name>
Тем временем оригинальная репа тоже не стояла на месте и там также появились дичайшие обновления. Как обновить свою репу? Для начала:
gitk
посмотреть на хитросплетения веток (-all)
git remote -v
(проверяем откуда и куда растут уши нашего побега). По выполнении показывает вот что:
origin https://github.com/<my_username>/<fork>.git (fetch)
origin https://github.com/<my_username>/<fork>.git (push)
upstream https://github.com/<dev_user>/<original>.git (fetch)
upstream https://github.com/<dev_user>/<original>.git (push)
origin — эт то, что у нас на локалке; наш клон проекта. upstream — это работа с родительским проектом. В конце в скобках пишут, что мы с ними можем делать — fetch (вытянуть) и push (задвинуть туда из клона). кстати, git pull
— это по сути две команды в одной: git fetch
и git merge
.
Теперь собсно обновляем мастера своего форка:
git fetch upstream
git checkout master
git rebase upstream/master
Далее переключаемся на свою ветку и делаем rebase:
git checkout <branch_name>
git merge master
Ну и закидываем новую версию на удаленку:
git push --set-upstream origin <branch_name>
Поздравляю, вы справились!