Найти коммит на GitHub по хешу коммитов

286

Я довольно новичок в Github и столкнулся с проблемой любителя.

Меня попросили сделать обзор кода и мне предоставили хеш коммита, однако я попытался посмотреть в Git, могу ли я искать с использованием хэшей коммитов, но ничего не смог найти.

Есть ли способ найти измененный код, просто используя хеш коммита?

dopplesoldner
источник
46
Я нахожу совершенно странным, что github не распознает хэши в поисках и показывает вам коммит, если есть один соответствующий хеш.
Крейг Рингер
На самом деле @CraigRinger, поиск в github будет соответствовать хэшам, если они встречаются в запросе на получение . В самом деле, вы можете искать во всем github префикс хеша из семи символов, если хотите. Но это должен быть запрос на удаление, а не просто фиксация.
Тодд Оуэн
4
@ToddOwen Что приятно, но не в этом суть. Он должен соответствовать хэшам коммитов в репо, когда вы выполняете поиск в этом репо, это действительно странно, что это не так.
Крейг Рингер
2
@CraigRinger Это теперь, наконец! Смотрите мой новый ответ .
Тодд Оуэн

Ответы:

379

URL-адрес формы https://github.com/<owner>/<project>/commit/<hash>покажет вам изменения, внесенные в этот коммит. Например, вот недавнее исправление, которое я сделал в одном из моих проектов на GitHub:

https://github.com/jerith666/git-graph/commit/35e32b6a00dec02ae7d7c45c6b7106779a124685

Вы также можете сократить хеш до любого уникального префикса, например так:

https://github.com/jerith666/git-graph/commit/35e32b


Я знаю, что вы только что спросили о GitHub, но для полноты: если вы извлекли хранилище из командной строки, вы можете достичь в основном того же самого с помощью любой из этих команд (здесь также работают уникальные префиксы):

git show 35e32b6a00dec02ae7d7c45c6b7106779a124685
git log -p -1 35e32b6a00dec02ae7d7c45c6b7106779a124685

Примечание. Если вы укоротите хеш коммита слишком далеко, командная строка выдаст вам полезное сообщение об устранении неоднозначности, но GitHub просто вернет 404.

Мэтт МакГенри
источник
Я столкнулся с этим, когда пытался отследить утверждение в монго, и обнаружил, что есть аналогичный шаблон URL для просмотра конкретного файла, учитывая хеш коммита: github.com/$owner/$project/blob/$hash/path /to/file.ext - например, github.com/mongodb/mongo/blob/…
RubyTuesdayDONO
В этом: git log -p -1 35e32b6a00dec02ae7d7c45c6b7106779a124685, то -1необходимо , потому что в противном случае было бы показать все olders фиксации; хорошо знать, что вы можете использовать четыре начальных числа хэша (минимум в моих тестах), потому что для хэша нет автозаполнения; и вы не можете указать ветку , как это: git log master -p -1 35e3. Версия Git: 1.7.9.5.
Рафаэль Баррос
Еще одно замечание, но одно очень важное: опять же, вы не можете указать ветку, но он автоматически ищет локальные и удаленные ветви, когда вы даете хеш. Итак, да, вы можете искать конкретный удаленный diff перед слиянием с локальным репо из командной строки.
Рафаэль Баррос
1
В случае, если кому-то интересно (я был!), Это также работает с первыми 8 git log -p -1 35e32b6a
хэшами
7
Это довольно глупо, что пользовательский интерфейс не делает это проще, чем сейчас ... Я надеюсь, что запрос функции сделает это.
Окрокет
49

Просмотр отдельного коммита:
https://github.com/<user>/<project>/commit/<hash>

Посмотреть журнал:
https://github.com/<user>/<project>/commits/<hash>

Посмотреть полное репо:
https://github.com/<user>/<project>/tree/<hash>

<hash> может быть любой длины, пока он уникален.

qwertzguy
источник
1
если длина не менее 7 символов, это нормально
Касун Сиямбалапития
3
Минимальная длина хеша коммита не
должна
21

Возможность поиска коммитов была недавно добавлена ​​в GitHub.

Чтобы найти хеш, просто введите как минимум первые 7 символов в поле поиска. Затем на странице результатов перейдите на вкладку «Передачи», чтобы увидеть соответствующие коммиты (но обычно только в ветке по умолчанию master), или на вкладке «Проблемы», чтобы просмотреть запросы на извлечение, содержащие коммит.

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

Существует также REST API (на момент написания он все еще находится в предварительном просмотре).

Тодд Оуэн
источник
2
Я удивлен, что это действительно работает таким образом. Это не так интуитивно понятно. По умолчанию Github будет отображать вкладку «Код», без каких-либо результатов. Разве не должна отображаться единственная вкладка с результатами по умолчанию?
лето
Итак, чтобы быть ясным, если у вас есть собственная корпоративная установка github, вы можете найти любой коммит в любом репо, выполнив его поиск следующим образом: https://YourGithubDomain/search?q=YOUR_COMMIT_HASH&type=Commits Обратите внимание, что я пробовал это также на Github, и он работал там также, например https://github.com/search?q=38db172d13962ea177c00c9a3b4b3169b317e94b&type=Commits
Brad Parks