Jeśli chcesz znaleźć wszystkie zatwierdzenia, w których komunikat zatwierdzenia zawiera dane słowo, użyj
$ git log --grep=word
Jeśli chcesz znaleźć wszystkie zatwierdzenia, w których „słowo” zostało dodane lub usunięte w treści pliku (a ściślej: gdzie zmieniła się liczba wystąpień „słowa”), tj. Przeszukaj zawartość zatwierdzenia , użyj tak zwanego wyszukiwania „kilof” za pomocą
$ git log -Sword
W nowoczesnym git jest też
$ git log -Gword
szukać różnic, których dodana lub usunięta linia pasuje do „słowa” (również zatwierdza treść ).
Zauważ, że -G
domyślnie akceptuje regex, podczas gdy -S
akceptuje ciąg, ale można go zmodyfikować, aby akceptował regex za pomocą --pickaxe-regex
.
Aby zilustrować różnicę między -S<regex> --pickaxe-regex
i -G<regex>
rozważyć commit z następującym diff w tym samym pliku:
+ return !regexec(regexp, two->ptr, 1, ®match, 0);
...
- hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
Chociaż git log -G"regexec\(regexp"
pokaże to zatwierdzenie, git log -S"regexec\(regexp" --pickaxe-regex
nie zmieni się (ponieważ liczba wystąpień tego ciągu nie uległa zmianie).
W Git 2.25.1 (luty 2020) dokumentacja została wyjaśniona wokół tych wyrażeń regularnych.
Zobacz commit 9299f84 (06 lutego 2020) autorstwa Martina Ågrena (``) .
(Połączone przez Junio C Hamano - gitster
- w commit 0d11410 , 12 lutego 2020)
diff-options.txt
: na przykład unikaj przeciążenia „regex”
Zgłoszony przez: Adam Dinwoodie
Podpisany przez: Martin Ågren
Oceniony przez: Taylor Blau
Kiedy pokazujemy różnicę między -G
i -S
(za pomocą --pickaxe-regex
), robimy to za pomocą przykładowego diff i git diff
wywołania obejmującego „regexec”, „regexp”, „regmatch”, ...
Przykład jest poprawny, ale możemy ułatwić rozplątywanie, unikając pisania „regex. *”, Chyba że jest to naprawdę potrzebne, aby o tym powiedzieć.
Zamiast tego użyj gotowych słów, które nie są wyrażeniami regularnymi.
git diff
Dokumentacja obejmuje obecnie:
Aby zilustrować różnicę między -S<regex> --pickaxe-regex
i
-G<regex>
rozważyć commit z następującym diff w tym samym pliku:
+ return frotz(nitfol, two->ptr, 1, 0);
...
- hit = frotz(nitfol, mf2.ptr, 1, 0);
Chociaż git log -G"frotz\(nitfol"
pokaże to zatwierdzenie, git log
-S"frotz\(nitfol" --pickaxe-regex
nie zmieni się (ponieważ liczba wystąpień tego ciągu nie uległa zmianie).