-
Форкаем репозиторий
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 # полный вариант команды
Контрибьютинг в github проекты
25.01.2017