Об’єднати запит на витяг до іншої гілки, ніж за замовчуванням, у Github


122

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

Чи є мені спосіб змінити, в яку галузь зміни будуть об'єднані?

Відповіді:


86

Станом на 15.08.2016 GitHub дозволяє змінювати цільову гілку запиту на виклик через GUI. Клацніть Editпоруч із заголовком, а потім виберіть гілку зі спадного меню.

скріншот

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


1
Це має бути правильною відповіддю на це питання (після оновлення до GitHub, тобто).
приголомшливий

Ця функція, здається, вже не існує (станом на 2018-02-15), чи не так? У нещодавньому запиті на виклик цільова гілка відображається тим самим синім шрифтом на світло-блакитному тлі, як вихідний сховище / гілка, і більше не є кнопкою.
cgogolin

12
Ах! Це робить! Спершу потрібно натиснути на "Редагувати" (що не очевидно на наведеному вище скріншоті). Я це не помітив. Вибачте.
cgogolin

@cgogolin Дякую за те, що наголосив на цьому - мене теж розгубило, поки я не прочитав ваш коментар і не натиснув кнопку Редагувати.
mhucka

Github попереджає, що "Змінивши базову гілку запиту на виклик, деякі комісії можуть бути вилучені із часової шкали". та "Деякі комісії зі старої базової гілки можуть бути видалені зі шкали часу." Будь-яка ідея, що це означає?
Маттіас Фріпп

55

Подаючий може змінити це, коли надсилає запит на витяг, але як тільки він видає його, ви не можете змінити його.

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

Ви можете виявити, що hubдорогоцінний камінь корисний для роботи з компонентами запиту на виклик.

Цей самоцвіт завершує ручний процес, а саме:

  1. Додайте пульт дистанційного доступу для виделки до місцевого замовлення.
  2. Отримати цей пульт.
  3. git checkout ${target_branch} && git merge ${remote}/${branch}
  4. git push origin ...

1
Якщо я вручну об'єднаюсь і натисну, чи зрозуміє Github, що запит на витяг був фактично виконаний? Будь-які вказівки про те, як злитися з віддаленого окремого репо (вилки)?
eoinoc

3
Я не впевнений, але не безпосередньо - тому що зміна не об'єдналася в цільову гілку, тому запит на витяг не виконується, як визначено. Його потрібно вручну закрити. Щодо покажчиків, дивіться відредагований коментар.
Даніель Піттман

Я б рекомендував використовувати так, git merge --no-ff ...як у своїй відповіді згадує @GuillermoMansilla.
jjmontes

3
"Щойно вони видадуть її, ви не можете її змінити" - З серпня 2016 року це вже не так! Дивіться відповідь @maliayas нижче: stackoverflow.com/a/38985999/12484
Джон Шнайдер

1
Я дотримувався цієї процедури сьогодні (3 березня 2017 р.). Я завантажив запит на тягнення в іншу гілку і зробив кілька додаткових виправлень до нього, а потім об'єднався в master. Після того, як коміти з запиту на виклик закінчилися в майстер, GitHub автоматично закрив запит на витяг.
Іван Кривяков

14

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

$ git fetch origin
$ git checkout *target_branch*
$ git merge pr/XXX
$ git push origin *target_branch*

Команди, описані вище, працюють безпосередньо, якщо ви спочатку додаєте у .git/configфайл наступний рядок :

fetch = +refs/pull/*/head:refs/remotes/symbolic_name_origin_or_upstream/pr/*

Це означає, що ви можете завантажувати ВСІ запити на тягу. Оскільки це не може бути бажаним для величезних репостів, GitHub змінив інструкції, щоб відобразити git fetch origin pull/ID/head:BRANCHNAMEсинтаксис, що дозволяє уникнути зміни файлу конфігурації та завантажує лише один запит на потяг.


8

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

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

Потім поверніться до власного сховища та прийміть новий запит на тягу. Вуаля!


Чи працює це, якщо вони змінили своє сховище? Як можна гарантувати, що це "те саме здійснює?"
ragerdl

@ragerdl - Якщо ви розробляєте за допомогою моделі "особливість на галузь", тоді ви можете створити PR з гілкою проти гілки вище за течією, і вона повинна містити ті самі коміти.
geerlingguy

2
Єдиний спосіб зробити це безпосередньо на GitHub, без доступу до місцевого репо.
kopischke

8

У рішенні Деніела Пітмена немає нічого поганого, проте я би трактував ці злиття як "не швидкий вперед", тобто змінюючи крок №3 для:

git checkout ${target_branch} && git merge --no-ff ${remote}/${branch}

Використовуючи --no-ffісторію буде легше читати. Це однозначно скаже, що $nкомісії відбулися $branch, і це також полегшить ваше життя, якщо вам потрібно повернути щось зроблене в цій галузі.

Щоб також відповісти на запитання eoinoc і дати додаткову пораду:

Зробивши злиття, ваш git cli запропонує вам написати повідомлення, як правило, з'явиться загальне повідомлення про щось подібне

Об’єднайте відділення віддаленого відстеження "користувач / їх гілка" у вашу гілку

Обов’язково відредагуйте це повідомлення та додайте посилання на номер запиту на виклик. Тобто: (якщо припустити номер запиту на витяг 123)

Об’єднайте відділення віддаленого відстеження "користувач / їх гілка" у вашу гілку

refs # 123 вирішення будь-якого ...

Отож, наступного разу, коли ви завітаєте на сторінку про проблеми github / pull-questions та перевірте цей конкретний запит на виклик, ви побачите своє повідомлення із посиланням на те, щоб зробити місце, де ви зробили об'єднання.

Ось скріншот того, що я маю на увазі.

введіть тут опис зображення


6

Для цього перейдіть на головну сторінку вашого сховища, натисніть на гілки та змініть гілку за замовчуванням з головного на щось інше, в моєму випадку "dev".

Після цього кожен раз, коли хтось створює запит на mergeвитягнення, кнопка автоматично об'єднує запит у "dev", а не в master.

введіть тут опис зображення


дякую за виправлення помилки @ the Tin Man Я ціную це
abbood

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