Ответы:
По состоянию на 15.08.2016 GitHub позволяет изменять целевую ветвь pull request через графический интерфейс. Щелкните Edit
рядом с заголовком, затем выберите ветку в раскрывающемся списке.
Теперь вы можете изменить базовую ветку открытого запроса на вытягивание. После создания запроса на вытягивание вы можете изменить базовую ветвь, чтобы изменения в запросе на извлечение сравнивались с другой ветвью. Изменив базовую ветку исходного запроса на перенос, а не открывая новую с правильной базовой веткой, вы сможете сохранить ценную работу и обсуждение.
Отправитель может изменить это при отправке запроса на перенос, но как только он его отправит, вы не сможете его изменить.
С другой стороны, вы можете вручную объединить их ветвь и push, что я полурегулярно делаю для ошибочно настроенных запросов на вытягивание.
Вы можете найти hub
драгоценный камень полезным при работе с компонентами запроса на вытягивание.
Этот драгоценный камень завершает ручной процесс, а именно:
git checkout ${target_branch} && git merge ${remote}/${branch}
git push origin ...
git merge --no-ff ...
как упоминает @GuillermoMansilla в своем ответе.
Альтернативой использованию драгоценного камня концентратора, упомянутого в других ответах, является использование командной строки для локального слияния запросов на вытягивание , что позволяет вам:
$ git fetch origin
$ git checkout *target_branch*
$ git merge pr/XXX
$ git push origin *target_branch*
Приведенные выше команды работают напрямую, только если вы сначала добавляете в .git/config
файл следующую строку :
fetch = +refs/pull/*/head:refs/remotes/symbolic_name_origin_or_upstream/pr/*
Это позволяет вам загружать ВСЕ запросы на вытягивание. Поскольку это может быть нежелательно для огромных репозиториев, GitHub изменил инструкции для включения git fetch origin pull/ID/head:BRANCHNAME
синтаксиса, который позволяет избежать модификации файла конфигурации и загружает только этот единственный запрос на перенос.
Хотя вы не можете изменить существующий запрос на перенос, поскольку он не ваш, вы можете легко создать новый, если связанный исходный репозиторий все еще существует - да, даже если он принадлежит кому-то еще.
Перейдите в репозиторий отправителя, затем создайте новый запрос на перенос в его / ее репозитории, используя те же коммиты, но убедитесь, что вы правильно установили правильную целевую ветку.
Затем вернитесь в свой репозиторий и примите новый запрос на перенос. Вуаля!
В решении Дэниела Питтмана нет ничего плохого, однако я бы рассматривал эти слияния как «без перемотки вперед», то есть изменение шага номер 3 для:
git checkout ${target_branch} && git merge --no-ff ${remote}/${branch}
Благодаря использованию --no-ff
историю будет легче читать. В нем будет четко указано, что были совершены $n
коммиты $branch
, и это также упростит вашу жизнь, если вам нужно отменить что-то, сделанное в этой ветке.
Чтобы также ответить на вопрос eoinoc и дать дополнительный совет:
После выполнения слияния ваш git cli предложит вам написать сообщение, обычно появляется общее сообщение, говорящее что-то вроде
Слияние ветки удаленного отслеживания user / their-branch с вашей веткой
Обязательно отредактируйте это сообщение и включите ссылку на номер запроса на вытягивание. То есть: (Предполагая, что номер запроса на вытягивание равен 123)
Слияние ветки удаленного отслеживания user / their-branch с вашей веткой
refs # 123 решение чего угодно ...
Итак, в следующий раз, когда вы посетите страницу вопросов / запросов на github и проверите этот конкретный запрос на перенос, вы увидите свое сообщение со ссылкой для фиксации, где вы выполнили слияние.
Вот скриншот того, что я имею в виду.
Для этого перейдите на домашнюю страницу вашего репозитория, щелкните ветки и измените ветку по умолчанию с master на что-то другое, в моем случае «dev».
После этого, всякий раз, когда кто-то создает запрос на merge
перенос, кнопка автоматически объединяет запрос в «dev», а не в мастер.