Найдите Pull Request на GitHub, где изначально был создан коммит

Запросы на вытягивание отлично подходят для понимания более широкого представления об изменении или наборе изменений, внесенных в репо. Чтение запросов на вытягивание - отличный способ быстро «разобраться» в проекте, поскольку вместо небольших атомарных изменений в источнике вы получаете более крупные группы логических изменений. Аналогично организации строк в вашем коде в связанные «строфы» для облегчения чтения.

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


person DragonFax    schedule 23.07.2013    source источник
comment
+1 Это также полезно, если вы разветвили проект и у вас есть старая рабочая ветка, и вы больше не помните, делали ли вы когда-либо для нее пиар.   -  person Steve Clay    schedule 13.09.2013


Ответы (6)


Вы можете просто зайти на GitHub и ввести SHA в строку поиска, не забудьте выбрать ссылку «Проблемы» слева.

ОБНОВЛЕНО 13 июля 2017 г.

С помощью пользовательского интерфейса GitHub теперь есть очень простой способ сделать это. Если вы просматриваете фиксацию в списке коммитов в ветке пользовательского интерфейса, щелкните ссылку на саму фиксацию. Если для этого коммита есть PR, и он не был добавлен непосредственно в ветку, ссылка на PR с указанием номера PR и ветки, в которую он вошла, будет находиться непосредственно под сообщением фиксации в верхней части страницы. введите описание изображения здесь


«Пример

Если у вас есть SHA фиксации и ничего больше, и вы не хотите копаться в ней, просто добавьте /commit/[commit SHA] к URL-адресу репо, и вы увидите страницу фиксации со ссылкой PR, если она существует. Например, если SHA - 52797a7a3b087231e4e391e11ea861569205aaf4, а репо - https://github.com/glimmerjs/glimmer-vm, затем перейдите на страницу https://github.com/glimmerjs/glimmer-vm/commit/52797a7a3b087231e4e391e11ea861569205aaf4

person RustyToms    schedule 18.09.2014
comment
Я не могу заставить это работать с коротким SHA, например e4077951, это все еще работает для вас? - person Matt Sanders; 13.01.2016
comment
@RustyToms, это работает, но когда я искал хеш фиксации, как вы упомянули, [github.com/wso2/carbon-kernel/ он предоставил мне два запроса на вытягивание, оба слили одну и ту же фиксацию с мастером. В таком сценарии то, что мы должны выбрать в качестве запроса Pull, объединяющего соответствующий коммит - person Kasun Siyambalapitiya; 03.01.2017
comment
@RustyToms, как мы можем добиться этого через API - person Kasun Siyambalapitiya; 04.01.2017
comment
@marathon есть еще более простой способ сделать это сейчас, я обновлю ответ - person RustyToms; 13.07.2017
comment
Если нет ссылки на PR, могу ли я сделать вывод, что PR не было? То есть фиксация была сделана прямо на ветке (обычно master)? - person Erik; 07.05.2018
comment
Я так думаю @Erik - person RustyToms; 02.11.2019

git config --add remote.origin.fetch +refs/pull/*/head:refs/remotes/origin/pull/*
git fetch origin
git describe --all  --contains <COMMIT>

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

Это заставит git получать информацию о запросах на вытягивание вместе с фактическими ветвями. Они будут отображаться в виде веток удаленного отслеживания, например origin/pull/123. Как только это будет сделано, вы можете использовать git describe с параметрами --all и --contains, чтобы показать первую ветвь, на которую есть ссылка на фиксацию.

Однако это не сработает, если коммит, который вы ищете, на самом деле является модифицированной версией коммита из запроса на вытягивание, например, если изменения были перенесены на другую работу или человек, выполняющий слияние, решил внести некоторые изменения.

person qqx    schedule 23.07.2013
comment
Я предполагаю, что это приведет к загрузке всех коммитов в отклоненных PR. Нет ли способа получить список pull/*/head коммитов без blob? Как бы после этого убрать (перенастроить истоки)? - person Steve Clay; 13.09.2013
comment
Это здорово знать; Я понятия не имел, что GitHub отслеживает их как реальные объекты Git, но это имеет смысл. Кстати, вы имели в виду использовать восходящий поток вместо origin в вашей команде конфигурации? - person Tobias J; 30.01.2014
comment
@TobyJ Использование upstream действительно было ошибкой. Я скопировал это из репозитория, в котором была эта конфигурация, в которой пульт дистанционного управления был назван upstream, и пропустил это вхождение, когда изменил его, чтобы использовать более распространенное origin в качестве имени пульта дистанционного управления. Я отредактировал ответ, чтобы исправить это. - person qqx; 30.01.2014
comment
Спасибо! Но это так сложно. Я бы хотел, чтобы в веб-интерфейсе была ссылка на содержащий пул-реквест. - person Daniel Darabos; 24.06.2014
comment
fwiw вы также можете попробовать использовать refs/remotes/origin/pr/* вместо refs/remotes/origin/pull/* - person elaichi; 09.01.2017
comment
Как только вы получите имя ветки, вы можете использовать параметр github head, чтобы получить связанный PR - см. разработчик. github.com/v3/pulls/#parameters - person Almenon; 08.03.2019
comment
Я хотел бы отметить, что это не сработает, если вы выберете Удалить ветку в PR, когда закончите. Я делаю это для уборки. Действительно прискорбно. - person Steven Linn; 08.02.2020

С 13 октября 2014 г. это должно быть просто:

Например:

Вы можете увидеть файл hakimel/reveal.js/plugin/markdown/markdown.js, теперь мой вклад содержит ссылку на PR № 734 возник.

PR от contrib

Это происходит из связывания объединенных запросов на вытягивание из коммитов:

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

коммит со ссылкой на PR!

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

Как всегда, если вы знаете SHA фиксации, вы можете пропустить страницу фиксации и .

person VonC    schedule 15.10.2014
comment
когда я искал хэш фиксации, как вы упомянули, [github.com/wso2/carbon-kernel/ он предоставил мне два запроса на вытягивание, оба слили одну и ту же фиксацию с мастером. В таком сценарии то, что мы должны выбрать в качестве запроса Pull, объединяющего соответствующий коммит - person Kasun Siyambalapitiya; 03.01.2017
comment
@KasunSiyambalapitiya Не уверен: для этого можно задать новый вопрос. Я бы выбрал самые свежие. - person VonC; 03.01.2017
comment
можем ли мы получить это на API уровне? - person Kasun Siyambalapitiya; 19.01.2017
comment
@KasunSiyambalapitiya Хороший вопрос. Я не знаю. Я не вижу этой ссылки на developer.github.com / v3 / repos / commits / # get-a-single-commit - person VonC; 19.01.2017
comment
@esp Интересно. Я вижу список PR, но не их коммит SHA1, отмечающий их интеграцию. - person VonC; 09.06.2017
comment
@VonC Я вижу список с одним PR, о котором идет речь - person esp; 09.06.2017
comment
@esp Странно: я вижу 30 объектов без фиксации: i.stack.imgur.com/wQmFL .png - person VonC; 09.06.2017
comment
Вы используете полную фиксацию sha? - person esp; 09.06.2017
comment
@esp Да. Теперь я вижу ссылку на проблему, которая, в свою очередь, имеет ссылку на PR. - person VonC; 09.06.2017

Поместите хеш фиксации в поле фильтров запроса на слияние на GitHub.

введите описание изображения здесь

person Dan Rosenstark    schedule 15.08.2017
comment
Это лучший способ ИМО, если PR еще не слили. - person Sebastian Wagner; 27.06.2018

У меня была такая же проблема, и я написал помощник bash pr_for_sha, описанный здесь:

http://joey.aghion.com/find-the-github-pull-request-for-a-commit/

Назовите его как pr_for_sha <COMMIT>, и он откроет соответствующую страницу запроса на вытягивание github в браузере.

person Joey    schedule 20.06.2014
comment
Это решение предполагает, что ближайшее слияние после фиксации - это слияние, содержащее фиксацию, что не всегда так. - person Jason Denney; 18.05.2015
comment
@JasonDenney Под подпиской вы подразумеваете в данной ветке или вовремя? - person LeZuse; 03.03.2017
comment
Хм, это было недавно, но, думаю, я имел в виду вовремя. Скажем, в понедельник вы делаете фиксацию X в ветке A, во вторник вы делаете фиксацию в ветке B и объединяете ветку B в master, в среду вы объединяете ветку A в master. Если вы использовали этот сценарий для поиска в основной ветке, в которой был зафиксирован PR-коммит X, я почти уверен, что он неверно сообщит вам ветку B. Однако дважды проверьте себя. - person Jason Denney; 04.03.2017
comment
Не удается заставить работать команду git log. git log --merges --ancestry-path --oneline 66100ab0..master - fatal: ambiguous argument '66100ab0..master': unknown revision or path not in the working tree. - git version 2.25.0 - person Gianfranco P.; 18.06.2020

Я был активным пользователем маленькой дерзкой ссылки в веб-интерфейсе GitHub, но мне нужен был более быстрый способ, который привел бы меня прямо из терминала, в основном команду git pr SHA. Потребовалось немного времени, но вот серия псевдонимов git, которые настроят это для вас на MacOS:

  git config --global alias.merge-commits '!funct() { git log --merges --reverse --oneline --ancestry-path $1..origin | grep "Merge pull request";  }; funct'
  git config --global alias.pr-number '!funct() { git merge-commits $1 | head -n1 | sed -n "s/^.*Merge pull request #\\s*\\([0-9]*\\).*$/\\1/p"; }; funct'
  git config --global alias.web-url '!funct() { git config remote.origin.url | sed -e"s/git@/https:\/\//" -e"s/\.git$//" | sed -E "s/(\/\/[^:]*):/\1\//"; }; funct'
  git config --global alias.pr '!funct() { open "`git web-url`/pull/`git pr-number $1`" ;}; funct'

Если вы работаете в Linux, замените open на xdg-open, и вы золотой. Адаптация к работе с GitLab не должна быть слишком сложной.

Обратите внимание, что это будет работать, только если вы практикуете поток GitHub и создаете явные коммиты слияния.

Я написал более подробное объяснение того, как все это работает, здесь: https://tekin.co.uk/2020/06/jump-from-a-git-commit-to-the-pr-in-one-command

person tekin    schedule 23.10.2020