Як я можу перевірити запит на притягування 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.