Есть ли способ получить SHA коммита из его сообщения? - PullRequest
12 голосов
/ 09 июня 2010

При выполнении git tag я не всегда хорошо запоминаю, является ли HEAD ~ 6 (например) включающим или исключительным.

Учитывая, что большинство моих коммитов имеют префикс номера, я подумал, есть ли какая-нибудь магическая команда для поиска SHA коммита по части его сообщения.

Я знаюлегко сделать git log и работать оттуда, но я хочу более легкого:)

РЕДАКТИРОВАТЬ : Кто-то также задал противоположный вопрос: В Git,Есть ли способ получить «дружественное» имя для произвольного коммита?

Ответы [ 3 ]

18 голосов
/ 09 июня 2010

Синтаксис :/blah можно использовать для указания коммита, сообщение о коммите которого начинается с заданного текста.

Е.Г.

git show ":/Issue #299"

Это действительно везде, где можно использовать коммит. Э.Г.

git cherry-pick ":/Issue #299"

Если вам действительно нужен SHA-1 коммита, вы можете просто использовать rev-parse.

git rev-parse ":/Issue #299"

См. Раздел «ОПРЕДЕЛЕНИЕ ПЕРЕСМОТРОВ» справочной страницы git rev-parse :

Двоеточие с косой чертой, за которым следует текст :
Это имя коммита, сообщение о коммите которого начинается с указанного текста.
Это имя возвращает самый молодой соответствующий коммит, который доступен из любой ссылки.
Если сообщение фиксации начинается с !, вы должны повторить это; специальная последовательность :/!, за которой следует нечто иное, чем !, зарезервирована на данный момент.

8 голосов
/ 09 июня 2010
git log --grep=word

должно помочь найти соответствующий коммит.
(в отличие от поиска commit content , где git log -S (опция кирки) или git grep более уместны)

Добавить различные параметры формата, такие как

git log --grep=word --pretty=oneline
git log --grep=word --pretty=format:"%h"

(последний показывает только SHA1), и вы готовы идти.


См. Также « Веселье с git log --grep»

git log --grep=frotz --grep=nitfol --since=1.month

Это находит коммиты, которые произошли в течение последнего месяца и упоминает или frotz или nitfol в их сообщениях журнала коммитов.
Как и в случае с обычным «git grep», указание нескольких шаблонов означает «тот или иной».

В статье указывается, что git grep ориентирован на строку, и используйте опцию --all-match в этой команде git log --grep.

Семейство "git log" использует механизм grep именно для этого "есть ли у всего совпадение?" аспект, а не «покажи мне линии, которые соответствуют этим критериям» аспект. Это позволяет использовать этот механизм так:

git log --all-match --grep=frotz --author=Linus

Это покажет коммиты с упоминанием frotz и написанные Линусом.

1 голос
/ 09 июня 2010

Попробуйте

git rev-list --grep='message excerpt' HEAD

Это будет список только коммитов, которые являются предками HEAD.Если вы хотите найти все коммиты в репозитории (включая те, которые не являются предками HEAD), я не уверен, как это сделать, кроме как вручную, вручную пройдя по всем веткам веток и выполнив эту команду.(Возможно, есть способ, я просто не знаю, что это может быть)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...