Найти запрос на извлечение на Github, где коммит был изначально создан

171

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

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

DragonFax
источник
1
+1 Это также полезно, если вы разветвляли проект и у вас сидела старая рабочая ветка, и вы больше не помните, делали ли вы когда-либо PR для него.
Стив Клэй,

Ответы:

226

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

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

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


Пример поиска PR, нажав на ссылку на коммит

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

RustyToms
источник
Я не могу заставить это работать с коротким, как SHA e4077951, это все еще работает для вас?
Мэтт Сандерс
@RustyToms это работает, но когда я искал хеш коммита, как вы упомянули, [ github.com/wso2/carbon-kernel/… он предоставил мне два запроса Pull, оба слили один и тот же коммит с мастером. В таком сценарии мы должны выбрать запрос Pull, объединяющий соответствующий коммит
Касун Сиямбалапития
@RustyToms, как мы можем добиться этого через API
Касун Сиямбалапития,
1
@marathon есть еще более простой способ сделать это сейчас, я
обновлю
1
Если нет ссылки на PR, могу ли я сделать вывод, что PR не было? То есть коммит был сделан прямо на ветке (обычно master)?
Эрик
53
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, чтобы показать первую ветвь, на которую ссылается коммит.

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

qqx
источник
Я предполагаю, что это приводит к загрузке всех коммитов в отклоненных PR. Нет ли способа получить выборку, чтобы получить списокpull/*/head коммитов без блобов? Как после этого «очиститься» (перенастроить происхождение)?
Стив Клэй,
1
Это приятно знать; Я понятия не имел, что GitHub отслеживает их как реальные объекты Git, но это имеет смысл. Кстати, вы имели в виду использовать «upstream» вместо «origin» в вашей команде config?
Тобиас Дж
1
@TobyJ Использование upstreamбыло действительно ошибкой. Я скопировал это из репозитория, в котором была эта конфигурация, в которой был назван пульт, upstreamи пропустил это вхождение, когда изменил его, чтобы использовать более распространенное originимя в качестве имени удаленного. Я отредактировал ответ, чтобы исправить это.
qqx
Спасибо! Но это так сложно. Хотелось бы, чтобы в веб-интерфейсе была ссылка на содержащий запрос на извлечение.
Даниэль Дарабос
Кроме того, вы можете попробовать использовать refs/remotes/origin/pr/*вместоrefs/remotes/origin/pull/*
elaichi
21

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

Например:

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

Пиар от вклада

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

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

совершить с пиар-ссылкой в ​​нем!

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

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

VonC
источник
когда я искал хеш коммита, как вы упомянули, [ github.com/wso2/carbon-kernel/… он предоставил мне два запроса Pull, оба слили один и тот же коммит с мастером. В таком сценарии мы должны выбрать запрос Pull, объединяющий соответствующий коммит
Касун Сиямбалапития,
@KasunSiyambalapitiya Не уверен: вы могли бы задать новый вопрос для этого. Я бы пошел с самым последним.
VonC
2
мы можем получить это на APIуровне?
Касун Сиямбалапития
@KasunSiyambalapitiya Хороший вопрос. Я не знаю. Я не вижу этой ссылки в developer.github.com/v3/repos/commits/#get-a-single-commit
VonC
@esp Интересно. Я вижу список PR, но не их коммит SHA1, отмечающий их интеграцию.
VonC
10

Поместите хеш коммита в поле Фильтры запросов на извлечение на GitHub.

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

Дэн Розенстарк
источник
Это лучший способ для ИМО, если пиар еще не слился.
Себастьян Вагнер
3

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

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

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

детеныш
источник
2
Это решение предполагает, что ближайшее слияние после коммита - это слияние, которое содержит коммит, что не всегда так.
Джейсон Денни
@JasonDenney Следуя, что вы имеете в виду в данной отрасли или во времени?
LeZuse
Хм, это было некоторое время назад, но я думаю, что имел в виду вовремя. Скажем, в понедельник вы делаете коммит "X" в ветви A, во вторник вы делаете коммит в ветви B и объединяете ветку B с мастером, в среду вы сливаете ветку A с мастером. Если бы вы использовали этот сценарий для выполнения поиска в основной ветке, в которой находился PR-коммит «X», я уверен, что он неверно сообщит вам ветку B. Хотя дважды проверьте себя.
Джейсон Денни
Не могу заставить 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
Джанфранко П.