Як зробити запит на тягу в GitHub


283

Як створити та / або надіслати запит на витяг до іншого сховища, розміщеного на GitHub?


2
Чи це недостатньо пояснено на довідкових сторінках GitHub ?
lanzz

27
@lanzz Ні, на сторінці довідки немає декількох корисних порад, про які я хотів би знати, перш ніж робити свої перші запити на витяг (див. нижче).
VonC

9
@ianzz, звичайно, сторінка Github "достатня", але є багато способів дізнатися. Те, що я прагнув, - це зробити підручник для початкового рівня. Що мені не вистачало в поясненні Гітхуба, це те, що: 1) він не містився в одному джерелі (дві сторінки, які чітко не пов'язані), 2) не був стислим (ці сторінки дуже довгі, довгі = непосильні), 3) не пояснено по-людськи в ключових розділах. Навчаючи, досвідченому викладачеві завжди важко знати, що не знає початківець. Поставити себе у взуття для початківців було моєю метою писати це.
tim peterson

12
Довгий може означати переважання, що може означати аборт = відсутність навчання. Можна «зрозуміти процес, що займається» через багато шляхів, які, очевидно, просто не були б однією з них. Щоб покінчити з полум'яною війною, відповідати не потрібно, я розумію, звідки ви родом.
tim peterson

8
Ви робите запит на тягу з власної вилки. Це точно не було моїм початковим припущенням.
Дерек Ільчук

Відповіді:


236

(На додаток до офіційної сторінки " Довідка GitHub" Використання запитів на виклики ",
див. Також" Відхилення від розгалуження в GitHub "," Яка різниця між початком і потоком в GitHub ")

Кілька порад щодо витягнутих запитів:

Якщо припустити, що ви вперше взяли на себе репо , ось що вам слід зробити в тій вилці, якою ви володієте:

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

Примітка: щоб написати Pull-Request сам, див. " Як написати ідеальний запит на тягу " (січень 2015, GitHub)


Березень 2016 року: Нова опція кнопки злиття PR: див. " Сквош Github здійснює з веб-інтерфейсу під час запиту на розгляд після перегляду коментарів ".

сквош

Супровідник репо може вибирати merge --squashці піарні зобов'язання.


Після отримання запиту

Щодо останнього пункту, з 10 квітня 2013 року " Перероблена кнопка злиття ", відділення для вас видалено:

нова кнопка злиття

Видалення гілок після об'єднання також було спрощено.
Замість підтвердження видалення додатковим кроком ми негайно видаляємо гілку, коли ви її видаляєте, і надаємо зручне посилання для відновлення гілки у випадку, якщо вона вам знову потрібна .

Це підтверджує найкращу практику видалення гілки після об'єднання запиту на виклик.


тягнути запит проти запиту-тягнути

  • запит на тягнення не є офіційним терміном "git".
    Git використовує команду request-pull(!)
    Для побудови запиту на об'єднання:
    вона "підсумовує зміни між двома комітами до стандартного виводу та включає вказану URL-адресу в генерований підсумок".
    Github запускає свою власну версію з першого дня (лютий 2008 р.) , Але переробив цю функцію в травні 2010 року , заявивши, що:

    Pull Request = Compare View + Issues + Commit comments
    

e-примітки до "reposotory" (sic)

<humour>

Це (запит на витягнення) навіть не визначено належним чином GitHub!

На щастя, справжня організація ділових новин знала б, і є електронна примітка для того, щоб витягнути заміни на "e-note" :

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

Так що, якщо ваші угоди РЕПО O торії необхідні електронне примітка ... запитати Fox Business . Вони знають.

</humour>


2
- @ VonC спасибі за це. Не хотіли б ви надати якийсь код, щоб вказати, чим те, що ви сказали, відрізняється від того, що я сказав? Рішення branchпроти masterздається критичним для отримання відповіді мого / Гітюба з теоретичного рішення на те, що б насправді було використано.
tim peterson

1
@timpeterson той факт, що ви можете повністю змінити історію в цій гілці, і що вона автоматично оновлюватиме запит на витяг, є ключовим тут: адже запит на витяг повинен бути виконаний на останньому з висхідного проекту. Якщо у цього репо-версії є нові коміти, ви повинні перезавантажити свою гілку поверх неї (змінивши історію цієї гілки) та повернути її до своєї вилки: це автоматично оновить ваш запит на витягу (на основі цієї ж гілки).
VonC

4
Я не розумію відновлювальної частини. Що це робить? (на цій сторінці це звучить як ракетна наука, але я вважаю, що це не так). Яку команду ви б видали в той момент, що "відновлює"?
Каміло Мартін

1
@CamiloMartin, якщо ви перебуваєте у вашій PR-галузі, то git pull --rebase upstream/masterсправді це добре.
VonC

1
@vikramvi master - це спільне відділення з оригінальним репо, яке ви роздвояли. Ця гілка завжди повинна відображати оригінальний репо. Ви ізолюєте свої виправлення у відділенні для PR. Ви використовуєте майстер лише як спосіб дізнатись, що знаходиться в оригінальному репо-репорті (а також для відновлення гілки виправлення зверху, щоб забезпечити легке злиття запиту)
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. натисніть кнопку "fork" на репо, до якого ви хочете внести свій внесок, у цьому випадку: 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-request", заповніть інформацію про внесені вами зміни та натисніть кнопку "Відправити".
    4. ви закінчили !!

4
- @ alexgray, я залишив підказки bash, наприклад, Tims-MacBook-Pro:third_party TimPeterson$оскільки це підручник для початківців, і ці підказки допомагають орієнтуватися на користувача.
tim peterson

1
Так. Дякую. Я можу наслідувати робочий приклад. Чому у вас немає цього git хабу?
Севеніартс

Після git fetch upstreamцього вам не потрібно об’єднувати зміни вгору за течією з локальною копією, використовуючи git checkout masterпотім git merge upstream/master?
Спархак

@Sparhawk Ні, вам не потрібно об’єднувати свої зміни в майстер, який знаходиться у вашій вилці. Запит на тягнення до іншого репо може базуватися виключно на філії. Однак, як правило, для вас також буде доцільно оновлювати майстра вилки, щоб ви змінювали "справжнє" репо і часто поверталися назад у циклі у вашому роздвоєному репо.
ely

1
@HimanshuShekhar так, але вам потрібно використовувати настільний додаток github або їх API. Браузер мені простіше.
Тім Петерсон

70

Для того, щоб зробити запит на потяг, вам потрібно виконати наступні дії:

  1. Форкуйте сховище (до якого ви хочете зробити запит на виклик). Просто натисніть кнопку «fork» на сторінці сховища, і у вас буде окреме сховище github, яке передує вашому імені користувача github.
  2. Клоніруйте сховище до вашої локальної машини. Програмне забезпечення Github, встановлене на локальній машині, може зробити це за вас. Натисніть кнопку клонування біля назви сховища.
  3. Внесіть локальні зміни / зобов’язання у файли
  4. синхронізуйте зміни
  5. перейдіть до свого сховища роздвоєних github і натисніть зелену кнопку "Порівняти та переглянути", крім кнопки гілки. (Кнопка має піктограму - немає тексту)
  6. Відкриється нова сторінка із зазначенням змін, а потім натисніть посилання на запит на витяг, який надішле запит первісному власнику репозиторію, у якому ви розщедрилися.

Знадобилося трохи часу, щоб це зрозуміти, сподіваюся, що це комусь допоможе.


3
Мені було незрозуміло, що вам потрібно розправити репо, перш ніж ви зможете зробити запит на тягу. Я подумав, що натиснута комісія просто перейде до якоїсь відкладеної гілки, яка має доступ до публічного запису, а потім з’єднається звідти. Дякую!
Кріс Арена

16

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

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

  • Викладіть репо в github
  • Отримайте URL-адресу клонування, натиснувши кнопку repo-клонування
  • Перейдіть до терміналу і запустіть 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. Нарешті, натисніть кнопку «Створити запит тягнути» ая потім «Створити запит тягнути» знову після того, як ви двічі перевірили заголовок і опис Вашого запиту по: введіть тут опис зображення

3

Я дотримувався вказівок Тім Петерсона, але створив локальну гілку для своїх змін. Однак після натискання я не бачив нової гілки в GitHub. Рішенням було додати -u до push команди:

git push -u origin <branch>

чи помітили ви 2 ім’я користувача у URL-адресі вище? Перший - tim-peterson2-йDwolla
Тим Петерсон

3
Також це краще як коментар до моєї відповіді. Можливо, ви отримаєте кілька голосів.
tim peterson

1

Я написав програму bash, яка виконує всю роботу зі створення відділення PR. При необхідності він виконує розгортання, синхронізує з висхідним потоком, налаштовує віддалений вихідний потік тощо, і вам просто потрібно здійснити свої зміни, натиснути та подати PR.

Ось як це запустити:

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

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


0

Причіпні Запит Найпростіше GitHub є з веб - інтерфейсу без використання мерзотника.

  1. Зареєструйте обліковий запис GitHub, увійдіть, а потім перейдіть на сторінку в сховищі, яке ви хочете змінити.
  2. Клацніть піктограму олівця ,

    шукайте текст поруч із місцеположенням, вкажіть потрібні зміни, а потім перегляньте їх, щоб підтвердити. Надайте запропонованій зміні опис до 50 символів та необов'язково розширений опис, а потім натисніть кнопку Пропонувати файл Змінити файл .

  3. Якщо ви читаєте це, у вас не буде доступу до сховища (папок проектів), тому GitHub створить копію сховища (фактично філії) у вашому обліковому записі. Натисніть кнопку Створити запит на потяг .

  4. Дайте опис запиту на опис та додайте будь-які коментарі та натисніть кнопку Створити кнопку запиту .
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.