Як я можу перевірити запит на притягування GitHub за допомогою git?


251

Я хотів би перевірити раніше створений запит на тягу (створений через веб-інтерфейс GitHub). Я шукав і знаходив різні місця, де refs / pull або refs / pull / pr

Але коли я додаю fetch = +refs/pull/*/head:refs/remotes/origin/pr/*до файлу git config і виконую підбір git

Що я роблю неправильно? Чи повинен GitHub автоматично створювати речі pull / xyz, або мені потрібно щось налаштувати?


Як виглядає повний віддалений розділ вашого конфігураційного файлу?


можливий дублікат клона github із запиту
— BuZZ-dEE

Я в кінцевому підсумку з цього питання, але я на самом деле потрібно stackoverflow.com/q/1783405/2413303
— EpicPandaForce

1
Другий абзац не є повним реченням. "Але коли я додаю ... і роблю git fetch" - коли ти робиш ці речі, що відбувається?
— cp.engr

Відповіді:


385

Щоб отримати віддалений піар у вашому місцевому репо,

git fetch origin pull/ID/head:BRANCHNAME

де IDідентифікатор запиту на виклик і BRANCHNAMEназва нової гілки, яку ви хочете створити. Після того як ви створили філію, то просто

git checkout BRANCHNAME

Дивіться офіційну документацію на GitHub для отримання додаткової інформації.


11
Я використовував це, щоб отримати PR з висхідного репо в моє місцеве роздвоєне репо, ви також можете замінити походження на вище за течією.
— Jngai1297

18
Моя команда виглядала так git fetch origin pull/1/head:githubusername, не так, як я очікував
— Ентоні

1
як повернути?
— fico7489

8
@Antoine BRANCHNAME- це все, що ви хочете назвати галуззю. Я здогадуюсь, що ви намагалися використовувати ім’я, яке вже існувало (наприклад master), і це не спрацювало, тож ви спробували своє ім'я користувача, яке справді працювало, оскільки їхня галузь з цією назвою не була. Можливо, я неправильно розумію, що ти говорив.
— Nateowami

1
Можливо, ви налаштували локальну репо ту, яка originвказує на вашу вилку та upstream- на оригінальне сховище (наприклад, дотримуйтесь help.github.com/articles/configuring-a-remote-for-a-fork ). Переконайтеся, що ви зміните originна upstreamзгадану команду, якщо ви хочете отримати запит на витяг з оригінального репо.
— мвлабат

127

Це дістанеться без того, щоб ви називали гілку:

git pull origin pull/939/head

Як отримати конкретний запит на витяг на моїй машині?


Цього цілком достатньо, tks
— rll

Цей працював для мене, метод вибору Тімбо зробив щось, але не правильно
— маль

30
Зауважте, що якщо ви робите це, наприклад, у своїй головній гілці, вона здійснюватиметься безпосередньо у цій гілці. Якщо ви хочете перенести запит на витяг в окрему гілку для постановки, спробуйте відповісти @ timbo.
— фенікс

3
Дітто, що сказав @phoenix. Я хочу, щоб гілка запиту про витягування дублювалася на моїй машині під власною гілкою, а не головним.
— Павло Чорноч

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

52

Цей суть описує те, що відбувається, коли ви робите вибір git:

Очевидно, змініть URL-адресу github, щоб відповідати URL-адресі вашого проекту. Виходить так:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:joyent/node.git
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

Тепер отримайте всі запити на витяг:

$ git fetch origin
From github.com:joyent/node
 * [new ref]         refs/pull/1000/head -> origin/pr/1000
 * [new ref]         refs/pull/1002/head -> origin/pr/1002
 * [new ref]         refs/pull/1004/head -> origin/pr/1004
 * [new ref]         refs/pull/1009/head -> origin/pr/1009
...

Щоб перевірити конкретний запит на витяг:

$ git checkout pr/999
Branch pr/999 set up to track remote branch pr/999 from origin.
Switched to a new branch 'pr/999'

У вас є різні сценарії, перелічені в випусках 259 для автоматизації цього завдання.
Проект git-extras пропонує команду git-pr(реалізовану в PR 262 )

git-pr(1) - перевіряє запит на витяг локально

СИНОПИС

git-pr <number> [<remote>]
git-pr clean

ОПИС

Створює локальну гілку на основі номера запиту на виклик GitHub, а потім перемикається на цю гілку.

Ім’я пульта, з якого вийдете. За замовчуванням до origin.

ПРИКЛАДИ

Це перевіряє запит на виклик 226із origin:

$ git pr 226

remote: Counting objects: 12, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 12 (delta 3), reused 9 (delta 3)
Unpacking objects: 100% (12/12), done.
From https://github.com/visionmedia/git-extras
  * [new ref] refs/pull/226/head -> pr/226
Switched to branch 'pr/226'

38

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

git fetch upstream pull/ID/head && git checkout FETCH_HEAD

де IDідентифікатор запиту на витягнення та upstreamде створений оригінальний запит на витяг (це може бути origin, наприклад).

Я сподіваюся, що це допомагає.


1
Мені подобається це рішення. Однією з переваг є те, що якщо PR оновлюється більше комісій, ви можете просто запустити це ще раз, і він потягне за собою нові коміти.
— Алекс Джонсон

14

Посилаючись на відповідь Стівена Пенні, найкраще створити тестову гілку та перевірити PR. Тож ось що б ви зробили.

  1. Створіть тестову гілку, щоб об'єднати PR в локальний. Якщо припустити, що ви перебуваєте на головній гілці:

git checkout -b test

  1. Отримати зміни PR в тестовій галузі

git pull origin pull/939/head:test

Тепер ви можете сміливо протестувати зміни в цій місцевій гілці тестування (в даному випадку з назвою тест ), і як тільки ви будете задоволені, зможете об'єднати їх, як зазвичай, з GitHub.


1
Я б пішов ще на один кращий - я створив би робоче дерево, встановив би його в нову testгілку і потім потягнув за собою PR - таким чином мені не потрібно відновити гілки на місцях, коли це буде зроблено; Я просто розпоряджаюся робочим деревом. Насправді я ніколи checkout -bбільше ніколи - я завжди створюю робоче дерево, а потім філію. Диск дешевий. Звичайно, у мене є сценарій, який робить це; Я не набираю всіх необхідних команд індивідуально.
— mpersico

11

Якщо ви використовуєте Github.com, перейдіть до розділу "Витягнути запити", натисніть відповідний запит на витягнення та натисніть посилання "Інструкції з командного рядка": інструкції командного рядка на Github.com


Скажіть, чи є насправді спосіб - коли ви дивитесь на github.com я маю на увазі - завантажити нові / змінені файли, PR? Отже, дивлячись на репо на github, ви можете натиснути зручну кнопку "скачати як zip", або, дійсно, ви можете просто пройти і просто переглянути кожен (весь) файл проекту. Щодо PR, я не можу зрозуміти, як просто натиснути на "подивитися файл" - знаєте, що я маю на увазі? Я щось пропускаю? Ура!
— Fattie

9

Ви можете використовувати git configкоманду для написання нового правила .git/configдля отримання запитів на витяг із сховища:

$ git config --local --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'

А потім просто:

$ git fetch origin
Fetching origin
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://github.com/container-images/memcached
 * [new ref]         refs/pull/2/head -> origin/pr/2
 * [new ref]         refs/pull/3/head -> origin/pr/3

8

Проблема деяких варіантів вище полягає в тому, що якщо хтось натисне більше зобов’язань на PR після відкриття PR, він не дасть вам найновішу версію. Для мене найкраще працює - перейдіть до PR та натисніть «Commits», прокрутіть донизу, щоб побачити найновіший хеш фіксації, введіть тут опис зображення а потім просто скористайтеся git checkout, тобто

git checkout <commit number>

у наведеному прикладі

git checkout 0ba1a50


2
Я вирішив саме цю проблему завдяки git fetch origin pull/ID/head:BRANCHNAMEпідходу, згаданому в stackoverflow.com/a/30584951/659732 . Дякую за рішення!
— joewiz

6

Я використовую hub, інструмент від github: https://github.com/github/hub

З місцем перевірки запиту на витяг на місцевому рівні все одно просто:

hub checkout https://github.com/owner/repo/pull/1234
or
hub pr checkout 1234

5

Для Bitbucket вам потрібно замінити слово pullна pull-requests.

По-перше, ви можете підтвердити стиль URL-адреси запиту на git ls-remote originкоманду за допомогою команди.

$ git ls-remote origin |grep pull
f3f40f2ca9509368c959b0b13729dc0ae2fbf2ae    refs/pull-requests/1503/from
da4666bd91eabcc6f2c214e0bbd99d543d94767e    refs/pull-requests/1503/merge
...

Як бачите, це refs/pull-requests/1503/fromзамістьrefs/pull/1503/from

Тоді ви можете використовувати команди будь-якої з відповідей.


4

Я випадково закінчив писати майже так само, як надали git-extras. Отже, якщо ви віддаєте перевагу одній спеціальній команді замість того, щоб встановлювати купу інших додаткових команд, просто помістіть цей git-prфайл десь у своєму, $PATHі тоді ви можете просто написати:

git pr 42
// or
git pr upstream 42
// or
git pr https://github.com/peerigon/phridge/pull/1

4

Якщо ви слідкуєте за робочим процесом "github fork", де ви створюєте виделку та додаєте віддалене репо вгору:

14:47 $ git remote -v
origin  git@github.com:<yourname>/<repo_name>.git (fetch)
origin  git@github.com:<yourname>/<repo_name>.git (push)
upstream        git@github.com:<repo_owrer>/<repo_name>.git (fetch)
upstream        git@github.com:<repo_owner>/<repo_name>.git (push)

щоб перейти до поточної гілки, ваша команда виглядатиме так:

git pull upstream pull/<pull_request_number>/head

щоб вийти в нову гілку, код виглядав би так:

git fetch upstream pull/<pull_request_number>/head:newbranch

3

Нещодавно Github випустив утиліту cli під назвою github-cli . Встановивши його, ви можете перевірити гілку запиту на виклик локально, скориставшись його id

наприклад: gh pr checkout 2267

Зауважте, що цей пакет все ще знаходиться в бета-версії


1

Отримайте віддалену гілку PR в місцеву гілку:

git fetch origin ‘remote_branch’:‘local_branch_name’

Встановіть верхню частину місцевої гілки на віддалену гілку.

git branch --set-upstream-to=origin/PR_Branch_Name local_branch

Коли ви хочете знову натиснути локальні зміни на відділення PR

git push origin HEAD:remote_PR_Branch_name


0

Припустимо, інформація про ваше походження та інформацію про те, як описано нижче

   $ git remote -v
   origin  git@github.com:<yourname>/<repo_name>.git (fetch)
   origin  git@github.com:<yourname>/<repo_name>.git (push)
   upstream   git@github.com:<repo_owner>/<repo_name>.git (fetch)
   upstream   git@github.com:<repo_owner>/<repo_name>.git (push)

і назва вашої філії схожа

   <repo_owner>:<BranchName>

тоді

   git pull origin <BranchName>

повинен виконувати цю роботу


Коли ви поділилися кодом, будь ласка, спробуйте пояснити свій код
— Юнус Темурленк

-3

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

git fetch git@github.com:<repo_owner>/<repo_name>.git
git checkout FETCH_HEAD
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.