Как сделать пул-запрос GitHub

283

Как создать и / или отправить запрос на извлечение данных в другое хранилище, размещенное на GitHub?

тим петерсон
источник
2
Разве это недостаточно объяснено на страницах справки GitHub ?
Lanzz
27
@lanzz Нет, на странице справки нет нескольких полезных советов, которые я хотел бы знать, прежде чем делать свои первые запросы на извлечение (см. ниже).
VonC
9
@ianzz, конечно, страницы Github достаточно, но есть много способов научиться. Я стремился сделать учебник для начинающих. Чего не хватало в объяснении Гитхуба, так это: 1) он не содержался в одном источнике (две страницы, которые явно не связаны), 2) не был кратким (эти страницы очень длинные, длинные = ошеломляющие), 3) был не объясняется с точки зрения человека в ключевых разделах. При обучении более опытному учителю всегда трудно понять, чего не знает новичок. Поставить себя на место начинающего было моей целью при написании этого.
Тим Петерсон
12
Длинный может означать подавляющий, что может означать прерывание = отсутствие обучения. Можно «в конечном итоге понять вовлеченный процесс» по многим направлениям, которые, очевидно, просто не были бы одним из них. Чтобы закончить войну пламени, не нужно отвечать, я понимаю, откуда ты.
Тим Петерсон
8
Вы делаете запрос на извлечение из своей вилки. Это было определенно не мое первоначальное предположение.
Дерек Иллчук

Ответы:

236

(В дополнение к официальной странице справки GitHub «Использование запросов извлечения »
см. Также « Разветвление и ветвление в GitHub », «В чем разница между источником и восходящим потоком в GitHub »)

Пара советов по pull-запросам:

Предполагая, что вы сначала разветвили репо , вот что вы должны сделать на той вилке, которой вы владеете:

  • создать ветку : изолировать ваши модификации в ветке. Не создавайте запрос извлечения, из masterкоторого вы могли бы собраться и смешать несколько модификаций одновременно.
  • перебазировать эту ветку : даже если вы уже сделали запрос на извлечение из этой ветви, перебазирование его поверх origin/master(убедившись, что ваш патч все еще работает) автоматически обновит запрос на извлечение (не нужно ничего нажимать)
  • обновите эту ветку : если ваш запрос на получение ответа отклонен, вы можете просто добавить новые коммиты и / или полностью повторить свою историю: он снова активирует ваш существующий запрос на возврат.
  • «сфокусировать» эту ветку : т.е. сделать ее тему «узкой», не изменять тысячи классов и всего приложения, только добавлять или исправлять четко определенные функции, сохраняя небольшие изменения .
  • удалить эту ветку : после того, как вы ее приняли, вы можете безопасно удалить эту ветку на вашем форке (и git remote prune origin). Графический интерфейс GitHub предложит вам удалить вашу ветку на странице вашего запроса.

Примечание: чтобы написать сам Pull-запрос, см. « Как написать идеальный Pull-запрос » (январь 2015, GitHub)


Март 2016: новая опция кнопки слияния PR: см. « Github squash фиксирует из веб-интерфейса запрос на извлечение после комментариев отзыва? ».

сквош

Сопровождающий репо может выбрать merge --squashэти пиар-коммиты.


После запроса на вытягивание

Что касается последнего пункта, то с 10 апреля 2013 года, « Переработана кнопка слияния », ветка удалена для вас:

новая кнопка слияния

Удаление веток после слияния также было упрощено.
Вместо того, чтобы подтвердить удаление дополнительным шагом, мы немедленно удаляем ветку при ее удалении и предоставляем удобную ссылку для восстановления ветки в случае, если она вам понадобится снова .

Это подтверждает лучшую практику удаления ветви после объединения запроса на удаление.


pull-request против request-pull

  • запрос pull не является официальным термином "git".
    Git использует команду request-pull(!)
    Для создания запроса на слияние:
    он «суммирует изменения между двумя фиксациями в стандартном выводе и включает указанный URL в сгенерированную сводку».
    Github запускает собственную версию с первого дня (февраль 2008 г.) , но переработал эту функцию в мае 2010 г. , заявив, что:

    Pull Request = Compare View + Issues + Commit comments
    

электронные заметки для "хранилища" (sic)

<humour>

Это (запрос на извлечение) даже не определено должным образом GitHub!

К счастью, настоящая организация деловых новостей знает об этом, и есть электронная заметка для замены pull-replace на «электронная заметка» :

https://pbs.twimg.com/media/BT_5S-TCcAA-EF2.jpg:large

Так что, если ваши сделки РЕПО O тории необходимы электронное примечание ... спросить Fox Business . Они в курсе.

</humour>

VonC
источник
2
- @ VonC спасибо за это. Не могли бы вы предоставить какой-нибудь код, чтобы указать, чем то, что вы сказали, отличается от того, что я сказал? Решение « branchпротив» masterкажется критическим для принятия ответа моего / Github от теоретического решения чего-то, что можно было бы фактически использовать.
Тим Петерсон
1
@timpeterson тот факт, что вы можете полностью изменить историю в этой ветке, и что она автоматически обновит запрос на получение, является ключевым здесь: потому что запрос на получение должен быть выполнен в последнем из вышестоящего проекта. Если в этом репозитории восходящего потока есть новые коммиты, вы должны перебазировать свою ветку поверх нее (изменив историю этой ветки) и отодвинуть ее обратно на свой ответвление: это автоматически обновит ваш запрос на извлечение (на основе этой же ветки).
VonC
4
Я не понимаю часть перебазирования. Что это делает? ( эта страница звучит как ракетостроение, но я верю, что это не так). Какую команду вы бы дали в тот момент, который «перебазирует»?
Камило Мартин
1
@CamiloMartin, если вы работаете в PR-отделе, то это git pull --rebase upstream/masterдействительно хорошо.
VonC
1
@vikramvi master - это общая ветка с оригинальным репо, который вы разветвили. Эта ветка всегда должна отражать исходный репо. Вы изолируете свои исправления в ветке для своего пиара. Вы используете master только как способ узнать, что находится в исходном репо (и перебазировать вашу ветку исправлений поверх нее, чтобы обеспечить легкое слияние запросов на извлечение)
VonC
202

Чтобы узнать, как сделать пулл-запрос, я просто проследовал на две отдельные страницы справки на Github (ссылки указаны ниже как маркеры). Следующие команды командной строки предназначены для части 1 . Часть 2 , фактический запрос на удаление, полностью выполняется на веб-сайте Github.

$ git clone https://github.com/tim-peterson/dwolla-php.git
$ cd dwolla-php
$ git remote add upstream https://github.com/Dwolla/dwolla-php.git
$ git fetch upstream
// make your changes to this newly cloned, local repo 
$ git add .
$ git commit -m '1st commit to dwolla'
$ git push origin master
  • Часть 1 : сделайте чье-то репо: https://help.github.com/articles/fork-a-repo

    1. нажмите кнопку «форк» на репо, в который вы хотите внести свой вклад, в данном случае: PHP- репозиторий Dwolla (Dwolla / dwolla-php)
    2. получите URL для вашего недавно созданного форка, в этом случае: https://github.com/tim-peterson/dwolla-php.git (tim-peterson / dwolla-php)
    3. введите приведенную git clone->cd dwolla-php->git remote->git fetchвыше последовательность для клонирования своего форка где-нибудь на вашем компьютере (то есть скопируйте / вставьте его, в данном случае third_party TimPeterson$:) и синхронизируйте его с главным репо (Dwolla / dwolla-php)
    4. внесите изменения в локальный репо
    5. введите приведенную git add->git commit->git pushвыше последовательность, чтобы отправить ваши изменения в удаленное хранилище, т. е. ваш форк на Github (tim-peterson / dwolla-php)
  • Часть 2 : сделать запрос на извлечение: https://help.github.com/articles/using-pull-requests

    1. перейдите на веб-страницу вашего форка на Github ( https://github.com/tim-peterson/dwolla-php )
    2. нажмите кнопку «тянуть запрос»
    3. дать название для pull-запроса, указать детали внесенных изменений и нажать кнопку «Отправить».
    4. Вы сделали !!
Тим Петерсон
источник
4
- @ alexgray, я оставил подсказки bash, например, Tims-MacBook-Pro:third_party TimPeterson$потому что это учебник для начинающих, и эти подсказки помогают ориентировать пользователя.
Тим Петерсон
1
Да. Спасибо. Рабочий пример, которому я могу следовать. Почему у тебя нет этого мерзавца?
Семь Земель
После того git fetch upstream, вам не нужно объединять вышестоящие изменения с вашей локальной копией, используя git checkout masterзатем git merge upstream/master?
Sparhawk
@ Sparhawk Нет, вам не нужно объединять свои изменения с мастером, который находится в вашем форке. Вытягивающий запрос к другому репо может быть основан исключительно на ветке. Однако, как правило, для вас будет хорошей практикой обновлять мастер своего форка по мере продвижения, чтобы изменения в «реальном» репо часто возвращались в цикл в вашем раздвоенном репо.
Ely
1
@HimanshuShekhar да, но вам нужно использовать приложение GitHub для настольных ПК или их API. Браузер для меня проще.
Тим Петерсон
70

Чтобы сделать запрос на извлечение, вам необходимо выполнить следующие шаги:

  1. Разветвите репозиторий (к которому вы хотите сделать пулл-запрос). Просто нажмите кнопку форка на странице репозитория, и у вас будет отдельный репозиторий github, которому будет предшествовать ваше имя пользователя github.
  2. Клонируйте репозиторий на свой локальный компьютер. Программное обеспечение Github, установленное на вашем локальном компьютере, может сделать это за вас. Нажмите кнопку клона рядом с именем хранилища.
  3. Вносить локальные изменения / коммиты в файлы
  4. синхронизировать изменения
  5. Перейдите в свой раздвоенный репозиторий github и нажмите зеленую кнопку «Сравнить и просмотреть», кроме кнопки ветвления. (У кнопки есть значок - нет текста)
  6. Откроется новая страница с вашими изменениями, а затем щелкните ссылку «запрос на извлечение», которая отправит запрос первоначальному владельцу разветвленного вами хранилища.

Мне понадобилось время, чтобы понять это, надеюсь, это кому-нибудь поможет.

Фархан
источник
3
Мне было непонятно, что вам нужно раскошелиться на репо, прежде чем вы сможете сделать запрос на выгрузку. Я подумал, что принудительная фиксация просто перейдет в какую-то ожидающую ветвь, которая имеет публичный доступ на запись, а затем объединится оттуда. Спасибо!
Крис Арена
16

Я начал проект, чтобы помочь людям сделать первый запрос на GitHub. Вы можете сделать практический урок, чтобы сделать свой первый PR здесь

Рабочий процесс прост как

  • Репо в github
  • Получить клон URL, нажав на кнопку клон репо
  • Перейти к терминалу и запустить git clone <clone url you copied earlier>
  • Сделайте ветку для изменений, которые вы делаете git checkout -b branch-name
  • Внести необходимые изменения
  • Зафиксируйте ваши изменения git commit
  • Поместите ваши изменения в ваш форк на GitHub git push origin branch-name
  • Перейдите на свою вилку на GitHub, чтобы увидеть Compare and pull requestкнопку
  • Нажмите на нее и укажите необходимые данные
Судо Бэнгбэнг
источник
15

Для тех из нас, кто имеет учетную запись github.com, но получает неприятное сообщение об ошибке, когда мы вводим «git» в командную строку, вот как это сделать в вашем браузере :)

  1. Так же, как Тим и Фархан написали: Форк свой собственный экземпляр проекта: Шаг 1: Вилка
  2. Через несколько секунд вы будете перенаправлены на собственную раздвоенную копию проекта: Шаг 2
  3. Перейдите к файлу (файлам), который нужно изменить, и нажмите «Редактировать этот файл» на панели инструментов: Шаг 3: Редактировать файл
  4. После редактирования напишите несколько слов, описывающих изменения, а затем «Зафиксируйте изменения», точно так же, как в основной ветке (так как это только ваша собственная копия, а не «основной» проект). Шаг 4: зафиксировать изменения
  5. Повторите шаги 3 и 4 для всех файлов, которые нужно отредактировать, а затем вернитесь к корню вашей копии проекта. Там нажмите зеленую кнопку «Сравнить, просмотреть ...»: Шаг 5: Начните отправку
  6. Наконец, нажмите кнопку «Создать запрос тянуть» ая затем «Создать запрос тянуть» снова после того, как вы дважды проверили заголовок и описание Вашего запроса по: введите описание изображения здесь
Sphinxxx
источник
3

Я следовал инструкциям Тима Петерсона, но я создал локальную ветвь для своих изменений. Однако после нажатия я не увидел новую ветку в GitHub. Решением было добавить -u к команде push:

git push -u origin <branch>
tamalet
источник
Вы заметили 2 имени пользователя в URL выше? первый tim-peterson2-ойDwolla
Тим Петерсон
3
Кроме того, это лучше в качестве комментария к моему ответу. Вы можете получить некоторые отрицательные отзывы.
Тим Петерсон
1

Я написал программу bash, которая выполняет всю работу по настройке PR-ветки для вас. При необходимости он выполняет разветвление, синхронизацию с вышестоящим, настройку удаленного вышестоящего и т. Д., И вам просто нужно зафиксировать свои изменения, отправить и отправить PR.

Вот как вы его запускаете:

github-make-pr-branch ssh your-github-username orig_repo_user orig_repo_name new-feature

Вы найдете программу здесь и его хранилище также включает в себя шаг за шагом руководство к выполнению того же процесса вручную , если вы хотите , чтобы понять , как он работает, а также дополнительная информация о том , как сохранить функцию ветви вверх-to свидание с вышестоящим мастером и другие полезные лакомые кусочки.

Stason
источник
0

Прицепные Запрос Простейшее GitHub является из веб - интерфейса без использования мерзавца.

  1. Зарегистрируйте учетную запись GitHub, войдите в систему и перейдите на страницу в репозитории, которую вы хотите изменить.
  2. Нажмите на значок карандаша ,

    поиск текста рядом с местоположением, внесите любые изменения, которые вы хотите, а затем просмотрите их для подтверждения. Дайте предлагаемому изменению описание длиной до 50 символов и, при необходимости, расширенное описание, затем нажмите кнопку « Предложить изменение файла» .

  3. Если вы читаете это, у вас не будет доступа для записи в хранилище (папки проекта), поэтому GitHub создаст копию хранилища (фактически ветви) в вашей учетной записи. Нажмите кнопку Создать запрос на извлечение .

  4. Введите описание запроса на извлечение и добавьте любые комментарии, затем нажмите кнопку « Создать запрос на извлечение» .
Flywire
источник