Как применить необработанные запросы на получение исходящих данных от других форков в мой форк? - PullRequest
432 голосов
/ 16 мая 2011

Проект на GitHub, в котором у меня есть форк, содержит новые запросы на извлечение, которые я хочу добавить в свой форк, которые автор еще не извлек.

Есть ли простой способ применить pull-запрос от других вилок к моему форку? Есть ли что-то еще, чего мне не хватает?

Ответы [ 6 ]

265 голосов
/ 16 мая 2011

Вы можете сделать это вручную довольно легко:

  • добавьте другой форк в качестве удаленного репо:

    git remote add otherfork git://github.com/request-author/project.git
    
  • получить коммиты своего репо

    git fetch otherfork
    
  • У вас есть два варианта применения запроса на извлечение (если вы не хотите выбирать вариант 1).

    1. Если вам не нужно применять также возможные фиксации, которые были добавлены между источником и запросом на получение, вы можете просто перебазировать ветвь, на которой был сформирован запрос на получение

      git rebase master otherfork/pullrequest-branch
      
    2. Если вы хотите, чтобы коммиты были только в запросе на получение, укажите их SHA1 и выполните

      git cherry-pick <first-SHA1> <second-SHA1> <etc.>
      
250 голосов
/ 26 февраля 2015

Обновление: через веб-страницу

Вы также можете сделать это через веб-страницу github.

Полагаю, у вас уже должен быть форк (MyFork) общего репо (BaseRepo), в котором имеется ожидающий запрос на извлечение из интересующего вас форка (OtherFork).

  1. Перейдите к форку (OtherFork), который инициировал запрос на получение, который вы хотели бы получить на свой форк (MyFork)
  2. Перейти на страницу запросов на получение OtherFork
  3. Нажмите новый запрос на извлечение
  4. Должны быть предложены ожидающие запросы на получение. Не забудьте выбрать правильную ветку OtherFork тоже. Выберите с левой стороны в качестве базовой вилки свою вилку (MyFork) ( ВАЖНО ).
  5. Теперь опция View pull request должна измениться на Create pull request. Нажмите это.

Теперь у вас должен быть ожидающий запрос на извлечение в вашей вилке (MyFork), который вы можете просто принять.

67 голосов
/ 26 июля 2012

Как Tekkub сказал ранее, вы можете просто вытянуть ветку напрямую.В большинстве случаев с GitHub ветвь просто "master" на форке запрашивающего пользователя проекта.

Пример: git pull https://github.com/USER/PROJECT/ BRANCH

19 голосов
/ 21 октября 2014

Запросы на извлечение проекта могут поступать от разных авторов (вилок), и вам, вероятно, не нужен отдельный пульт для каждой вилки.Кроме того, вы не хотите делать какие-либо предположения о ветке, которую автор использовал при отправке запроса на извлечение, или о том, что еще может быть в основной ветке автора.Поэтому лучше ссылаться на запрос на получение, как он появляется в репозитории upstream, а не на других форках.

Шаг 1:

git remote add upstream <url>

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

Шаг 2:

git pull upstream refs/pull/{id}/head

... где{id} - номер запроса извлечения.upstream - это имя удаленного пульта, с которого нужно извлекать данные, т. Е. Просто «вверх по течению», если вы точно выполнили шаг 1.Это также может быть URL-адрес, в этом случае вы можете пропустить шаг 1.

Шаг 3:

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

Merge PR#42, fixing VIM-652, support for mapping arbitrary IDEA actions
19 голосов
/ 19 ноября 2013

Более подробная информация, которая сработала для меня.

Мой файл .git / config для разветвленного репо выглядит так:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = false
[remote "origin"]
        url = git@github.com:litzinger/angular-carousel.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
        rebase = true
[remote "source"]
        url = git://github.com/revolunet/angular-carousel.git
        fetch = +refs/heads/*:refs/remotes/source/*
        fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

Затем запустите «git fetch source», который затем перечислил все запросы на получение от разветвленного репо.

 * [new ref]         refs/pull/54/head -> origin/pr/54
 * [new ref]         refs/pull/67/head -> origin/pr/67
 * [new ref]         refs/pull/69/head -> origin/pr/69
 * [new ref]         refs/pull/71/head -> origin/pr/71

А затем для слияния в определенном запросе на запуск запустите "git merge master origin / pr / 67"

9 голосов
/ 17 мая 2011

Я бы сделал следующее:

git checkout master
git remote add #NAME# #ADDRESS TO REPO#
git fetch #USERNAME#
git checkout -b test_fork
git rebase #NAME#/#BRANCH#

Теперь я объединил изменения в тестовую ветку с именем test_fork. Так что любые изменения не испортят мое дерево.

При желании вы можете использовать cherry-pick, как описано выше, чтобы выбрать конкретный коммит, если это более предпочтительно.

Счастливые путешествия:)

...