-
Форкаем репозиторий
github.com/user/project
, получаемgithub.com/you/project
-
Сливаем форкнутый репозиторий к себе:
git init git remote add origin https://github.com/you/project
либо
git clone https://github.com/you/project .
-
Создаем отсылку на исходный репозиторий (например, upstream)
git remote add upstream https://github.com/user/project
-
Можем проверить ссылки на удаленные репозитории
git remote -v
увидим
origin https://github.com/you/project upstream https://github.com/user/project
-
Сливаем к себе изменения
git pull origin master git pull upstream master
-
Если в upstream были изменения, которых еще нет в origin, то можем их запушить в origin
git push origin master
-
Создаем новую ветку и сразу переключаемся в нее
git branch feature git checkout feature # или тоже самое одной коммандой git checkout -b feature
-
Работаем, делаем коммиты…
-
Периодически отслеживаем изменения в «в родителях» и сливаем изменения с них
git checkout master git pull origin master git pull upstream master git push origin master
и вливаем в свою ветку таким образом:
git checkout feature git rebase master # или # git checkout feature # git merge master
-
При желании/необходимости, склеиваем все коммиты в ветке в один коммит общий коммит.
Для этого узнаем сколько у нас коммитов после master# смотрим какие коммиты были git cherry -v master # или сразу узнаем количество коммитов git cherry -v master | wc -l
Например, получилось 3 коммита. Склеиваем эти 3 коммита в 1
git reset --soft HEAD~3 git commit -m "New message for the combined commit"
-
Когда работу сделали, заливаем изменения в свой github-репозиторий в свою ветку
git push origin feature
-
Идем в исходный репозиторий на github (
github.com/user/project
)
Узнаем в какую ветку необходимо вливать изменения
Обычно этоproject/master
, но вREADME
или вCONTRIBUTING
может быть указано другое -
Идем в свой форкнутый репозиторий на github (
github.com/you/project
)
Создаем Pull Request, для этого жмем кнопку «New Pull Request»
Слева выбираем в какую ветку будут вливаться изменения в исходном репозитории, справа — какие изменения будут браться с вашего репозитория.
Например, слева project/feature, справа project/master.
Заполняем название и описание (название потом попадет в описание мерж-коммита и станет достоянием общественности, учтите это).
Нажимаем «Send Pull Request». -
Вуаля, pull request отправлен.
Владелец рассмотрит изменения и, возможно, их примет и вольет к себе.
На практике, лучше перед посылкой пулл-реквестов, вручную синхронизироваться с веткой, в которую будем посылать изменения, чтобы у владельца merge прошел гладко (больше шансов, что пулл примут ;-))
Не забываем потом сделать git pull upstream master, чтобы увидеть изменения у себя. -
Напоследок, когда pull request уже приняли, можно удалить свою ветку и локально и из своего форкнутого репозитория.
# удаляем локальную ветку git branch -d feature # сокращенный вариант команды git branch --delete feature # полный вариант команды # удаляем ветку в своем репозитории git push origin -d feature # сокращенный вариант команды git push origin --delete feature # полный вариант команды