#git #github #pull-request
#git #github #запрос на извлечение
Вопрос:
Я относительно новичок в Git. Мои знания на данный момент включают git add push commit
. Примерно так, и до сих пор это служило мне достаточно хорошо. 🙂
Однако сегодня утром кто-то прислал мне запрос на извлечение, который, как я прочитал, означает, что кто-то разветвил мой репозиторий, внес некоторые изменения и сообщает мне: «Привет, Серджио, я внес некоторые улучшения. Рассмотрите их для главной ветви.»
Я прав?
https://github.com/sergiotapia/CherryTomato/pulls
Если да, то как мне легко объединить изменения этого пользователя в главную ветку репозитория? Какие команды мне нужно запустить? Что еще более важно, может кто-нибудь объяснить процесс в терминах непрофессионала, что должно произойти?
Спасибо.
Ответ №1:
У вас правильная идея. если этот набор изменений кажется вам полезным, то вы, вероятно, захотите объединить его в свой репозиторий.
Github предлагает отличное руководство по реагированию на запросы на извлечение: https://help.github.com/articles/using-pull-requests Я бы начал с этого и посмотрел, есть ли у вас какие-либо более конкретные вопросы о процессе.
Ответ №2:
Github предоставляет экран очереди форков, который позволяет вам извлекать изменения в свой репозиторий непосредственно на Github. На этом экране каждый разветвленный коммит отображается зеленым или розовым цветом в зависимости от того, будет ли он применен чисто, и позволяет вам указать новую ветку в вашем репозитории для объединения изменений. URL для очереди форка http://github.com ///forkqueue
Обновление: Используйте следующие шаги, чтобы объединить запрос на извлечение в ваш главный репозиторий:
$ git checkout master
$ git remote add nakor git://github.com/nakor/CherryTomato.git
$ git fetch nakor
$ git merge nakor
$ git push origin master
Адаптировано из документации Github здесь: http://help.github.com/pull-requests/#merging_a_pull_request
В качестве альтернативы вы можете использовать новый «Запрос на извлечение слиянием», новую функцию, добавленную в Github сегодня (!): https://github.com/blog/843-the-merge-button
Комментарии:
1. Мне потребовалось немного времени, чтобы понять, что
nakor
здесь указано имя пользователя, отправившего PR. Обратите внимание, что после этогоgit fetch nakor
вы могли бы сделатьgit switch -c PR1
создание локальной ветки с именемPR1
(для вашего первого PR), чтобы у вас было больше возможностей проверять, сравнивать, тестировать и редактировать код перед объединением или даже отправить новую ветку обратно на GitHub (например, для создания нового PR).
Ответ №3:
Одна вещь, о которой явно не упоминается в руководстве по запросу на извлечение на GitHub, — это то, как указанный запрос на извлечение должен применяться к вашему коду:
я бы хотел, чтобы эти изменения были объединены:
- ускоренным способом (то есть простым перемещением
HEAD
моей ветки к следующей части исправления n commits) - или, по крайней мере, без какого-либо конфликта (патч изменяет / удаляет только строки, которые я не трогал локально, или добавляет новые строки)
Если есть малейший конфликт, лучше всего отклонить исправление, попросив отправителя снова извлечь ваш собственный код, разрешить любой конфликт локально в своем репозитории и сделать новый запрос на извлечение.
Таким образом:
- они выполняют всю работу («они» — это те, кто отправляет вам «запросы на извлечение», то есть исправления)
- вы получаете прибыль 😉
Ответ №4:
Много лет спустя появились новые решения, которые можно найти на этой странице. Когда в вашем локальном репозитории git, выполните:
gh pr checkout PRID
где PRID
номер запроса на извлечение (PR) или URL (например, «1» для первого PR). Это добавляет код из PR в качестве новой ветки в ваше локальное хранилище. Он использует gh
команду из cli-пакета GitHub и работает только для активных PR.
Без этого пакета и / или для неактивных PR вы можете сделать то же самое с:
git fetch origin pull/PRID/head:NewBranchName
git checkout NewBranchName
Это добавит PRID
код в качестве новой ветви с именем NewBranchName
в ваше локальное хранилище. Обратите внимание, что это работает без использования репозитория пользователя, отправившего PR, что означает, что это также работает, если пользователь (репозиторий) больше не существует или не отвечает.
Теперь вы можете локально проверять, сравнивать, тестировать и редактировать новую ветку и, например, объединять ее с master
. В качестве альтернативы, вы можете отправить новую ветку на GitHub с помощью, например:
git push origin NewBranchName
Это позволяет вам создать новый PR из новой ветки (чтобы заменить исходный PR) и вместо этого просмотреть и объединить его.