Контрибьютинг в github проекты

  1. Форкаем репозиторий github.com/user/project, получаем github.com/you/project

  2. Сливаем форкнутый репозиторий к себе:

    git init
    git remote add origin https://github.com/you/project
    

    либо

    git clone https://github.com/you/project .
    
  3. Создаем отсылку на исходный репозиторий (например, upstream)

    git remote add upstream https://github.com/user/project
    
  4. Можем проверить ссылки на удаленные репозитории

    git remote -v
    

    увидим

    origin https://github.com/you/project
    upstream https://github.com/user/project
    
  5. Сливаем к себе изменения

    git pull origin master
    git pull upstream master
    
  6. Если в upstream были изменения, которых еще нет в origin, то можем их запушить в origin

    git push origin master
    
  7. Создаем новую ветку

    git checkout -b feature
    
  8. Работаем, делаем коммиты…

  9. Периодически отслеживаем изменения в «в родителях» и сливаем изменения с них

    git checkout master
    git pull origin master
    git pull upstream master
    git push origin master
    

    и вливаем в свою ветку таким образом:

    git checkout feature
    

    …или git rebase master
    …или git merge master

  10. Когда работу сделали, заливаем изменения в свой github-репозиторий в свою ветку

    git push origin feature
    
  11. Идем в исходный репозиторий на github (github.com/user/project)
    Узнаем в какую ветку необходимо вливать изменения
    Обычно это project/master, но в README или в CONTRIBUTING может быть указано другое

  12. Идем в свой форкнутый репозиторий на github (github.com/you/project)
    Создаем Pull Request, для этого жмем кнопку «New Pull Request»
    Слева выбираем в какую ветку будут вливаться изменения в исходном репозитории, справа — какие изменения будут браться с вашего репозитория.
    Например, слева project/feature, справа project/master.
    Заполняем название и описание (название потом попадет в описание мерж-коммита и станет достоянием общественности, учтите это).
    Нажимаем «Send Pull Request».

  13. Вуаля, pull request отправлен.
    Владелец рассмотрит изменения и, возможно, их примет и вольет к себе.
    На практике, лучше перед посылкой пулл-реквестов, вручную синхронизироваться с веткой, в которую будем посылать изменения, чтобы у владельца merge прошел гладко (больше шансов, что пулл примут ;-))
    Не забываем потом сделать git pull upstream master, чтобы увидеть изменения у себя.