Если вы хотите найти все коммиты, в которых сообщение коммита содержит данное слово, используйте
$ git log --grep=word
Если вы хотите найти все коммиты, в которых «слово» было добавлено или удалено в содержимом файла (а точнее: где изменилось число вхождений «слова»), то есть поиск по содержимому коммита , используйте так называемый поиск «кирки» с
$ git log -Sword
В современном git есть также
$ git log -Gword
искать различия, чья добавленная или удаленная строка соответствует «слову» (также фиксирует содержимое ).
Обратите внимание, что -G
по умолчанию принимает регулярное выражение, в то время как -S
принимает строку, но может быть изменено, чтобы принимать регулярные выражения, используя --pickaxe-regex
.
Чтобы проиллюстрировать разницу между -S<regex> --pickaxe-regex
и -G<regex>
, рассмотрим коммит со следующим diff в том же файле:
+ return !regexec(regexp, two->ptr, 1, ®match, 0);
...
- hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
Пока git log -G"regexec\(regexp"
покажет этот коммит, git log -S"regexec\(regexp" --pickaxe-regex
не будет (так как количество вхождений этой строки не изменилось).
С Git 2.25.1 (февраль 2020) документация проясняется вокруг этих регулярных выражений.
См. Коммит 9299f84 (06 февраля 2020 г.) Мартина Агрена (``) .
(Объединено с Junio C Hamano - gitster
- в фиксации 0d11410 , 12 Feb 2020)
diff-options.txt
: избежать перегрузки "regex" в примере
Автор: Адам Динвуди.
Подписано: Мартин Агрен.
Автор: Тейлор Блау.
Когда мы иллюстрируем разницу между -G
и -S
(используя--pickaxe-regex
), мы делаем это с помощью примера diff и git diff
вызова, включающего «regexec», «regexp», «regmatch», ...
Пример верный, но мы можем упростить распутывание, избегая написания «регулярных выражений. *», Если только это действительно не нужно для нашей цели.
Вместо этого используйте некоторые выдуманные слова без регулярных выражений.
git diff
Документация теперь включает в себя:
Чтобы проиллюстрировать разницу между -S<regex> --pickaxe-regex
и
-G<regex>
, рассмотрим коммит со следующим diff в том же файле:
+ return frotz(nitfol, two->ptr, 1, 0);
...
- hit = frotz(nitfol, mf2.ptr, 1, 0);
Пока git log -G"frotz\(nitfol"
покажет этот коммит, git log
-S"frotz\(nitfol" --pickaxe-regex
не будет (так как количество вхождений этой строки не изменилось).