Подтвердить что ты не робот

Есть ли способ получить SHA фиксации из своего сообщения?

Когда вы выполняете git tag, я не всегда прекрасно помню, является ли HEAD ~ 6 (например) инклюзивным или эксклюзивным.

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

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

EDIT. Кто-то задал другой вопрос: В Git есть ли способ получить "дружественное" имя для произвольной фиксации?

4b9b3361

Ответ 1

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

например.

git show ":/Issue #299"

Это допустимо в любом месте, где может использоваться фиксация. Например.

git cherry-pick ":/Issue #299"

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

git rev-parse ":/Issue #299"

См. раздел "УКАЗАНИЕ ПЕРЕСМОТРЕНИЙ" страницы git rev-parse man:

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

Ответ 2

git log --grep=word

должен помочь найти соответствующую фиксацию.
(в отличие от поиска содержимого фиксации, где git log -S (опция pickaxe) или 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 и написанные Linus.

Ответ 3

Try

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

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