Как применять невостребованные запросы на вытягивание вверх от других вилок в свою вилку?

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

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

Ответ 1

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

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

    git remote add otherfork git://github.com/request-author/project.git
    
  • извлекает свои репо-транзакции

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

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

      git rebase master otherfork/pullrequest-branch
      
    • Если вам нужны только коммиты в запросе на вытягивание, укажите их SHA1 и сделайте

      git cherry-pick <first-SHA1> <second-SHA1> <etc.>
      

Ответ 2

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

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

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

  • Перейдите к fork (OtherFork), который инициировал запрос на растяжение, который вам нравится входить в вашу вилку (MyFork)
  • Перейдите на страницу запросов на тягу OtherFork
  • Нажмите новый запрос на удаление
  • Ожидается запрос ожидающего запроса. Не забудьте также выбрать подходящую ветку OtherFork. Выберите на левой стороне в качестве базовой вилки вилки (MyFork) ( ВАЖНО).
  • Теперь опция View pull request должна измениться на Create pull request. Нажмите здесь.

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

Ответ 3

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

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

И в качестве практического примера:

Скажем, вы разветкили проект github под названием safaribooks, и в исходном проекте есть следующий запрос на получение, который вы хотите поместить в свой форк:

enter image description here

Затем в папке клонированного проекта вашего форка запустите:

git pull https://github.com/fermionic/safaribooks.git fix-str-decode

Ответ 4

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

Файл My.git/config для forked repo выглядит следующим образом:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = false
[remote "origin"]
        url = [email protected]: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", который затем перечислил все запросы на pull из разветвленного репо.

 * [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 начало слияния оригинала /pr/ 67"

Ответ 5

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

Шаг 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

Ответ 6

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

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

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

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

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

Ответ 7

Для тех, кто хочет только этот форк и не хочет мучиться с командами git выше.

Просто зайдите к автору запроса на поиск, найдите его форк и скачайте его.

Ответ 8

Я использую удобный скрипт для этого. Я запускаю скрипт, набрав:

git prfetch upstream

и получает все запросы извлечения от ветки вверх по течению.

Для создания скрипта создайте файл ~/bin/git-prfetch.

Файл должен содержать следующее:

#!/bin/bash

if [ -z "$1" ]; then
    echo "Please supply the name of a remote to get pull requests from."
    exit 1
fi

git fetch $1 +refs/heads/\*:refs/remotes/$1/\* +refs/pull/\*/head:refs/remotes/$1/pr/\*

Убедитесь, что ваш путь включает в себя сценарий, установив:

export PATH="$HOME/bin:$PATH"

Вы можете добавить этот файл в ~/.bashrc, чтобы сделать изменение постоянным.

Теперь убедитесь, что вы добавили разветвление, от которого хотите получать запросы извлечения:

git remote add upstream https://github.com/user/repo.git

А потом

git prfetch upstream