Якщо ви хочете знайти всі коміти, у яких повідомлення про фіксацію містить задане слово, використовуйте
$ git log --grep=word
Якщо ви хочете знайти всі коміти, де "слово" було додано або видалено у вмісті файлу (точніше: там, де кількість випадків "слова" змінилося), тобто пошук вмісту комірок , використовуйте так званий пошук "pickaxe" з
$ git log -Sword
У сучасному git також є
$ git log -Gword
шукати відмінності , доданий чи видалений рядок відповідає "слову" (також виконувати вміст ).
Зауважте, що -G
за замовчуванням приймає регулярний вираз, тоді як -S
приймає рядок, але може бути змінено, щоб прийняти регулярні вирази за допомогою --pickaxe-regex
.
Щоб проілюструвати різницю між -S<regex> --pickaxe-regex
і -G<regex>
, розгляньте команду із наступним розбігом у тому ж файлі:
+ 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 р.) Мартіна Агрена (``) .
(Об'єднано Хуніо С Хамано - gitster
- у комітеті 0d11410 , 12 лютого 2020 року)
diff-options.txt
: уникайте перевантаження "регулярного вираження"
Повідомив: Адам Дінвуді
Підписався: Мартін Агрен Оглянув
: Тейлор Блау
Коли ми демонструємо різницю між -G
та -S
(використовуючи --pickaxe-regex
), ми робимо це, використовуючи приклад diff та git diff
виклик, що включає "regexec", "regexp", "regmatch", ...
Приклад правильний, але ми можемо полегшити розплутування, уникаючи написання "регулярного вираження".
Використовуйте замість цього кілька складених нерегексивних слів.
git diff
Документація тепер включає в себе:
Щоб проілюструвати різницю між -S<regex> --pickaxe-regex
і
-G<regex>
, розгляньте команду із наступним розбігом у тому ж файлі:
+ 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
не буде (тому що кількість зустрічей цього рядка не змінилося).