Как применять невостребованные запросы на вытягивание вверх от других вилок в свою вилку?
Проект на 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