Se si desidera trovare tutti i commit in cui il messaggio di commit contiene una determinata parola, utilizzare
$ git log --grep=word
Se si desidera trovare tutti i commit in cui "parola" è stata aggiunta o rimossa nel contenuto del file (per essere più precisi: dove il numero di occorrenze di "parola" è cambiato), ovvero cercare il contenuto del commit , utilizzare la cosiddetta ricerca "piccone" con
$ git log -Sword
Nel git moderno c'è anche
$ git log -Gword
per cercare le differenze la cui linea aggiunta o rimossa corrisponde a "parola" ( commetti anche i contenuti ).
Si noti che -G
per impostazione predefinita accetta una regex, mentre -S
accetta una stringa, ma può essere modificato per accettare regex utilizzando il --pickaxe-regex
.
Per illustrare la differenza tra -S<regex> --pickaxe-regex
e -G<regex>
, considerare un commit con la seguente diff nello stesso file:
+ return !regexec(regexp, two->ptr, 1, ®match, 0);
...
- hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
Mentre git log -G"regexec\(regexp"
mostrerà questo commit, git log -S"regexec\(regexp" --pickaxe-regex
non lo farà (perché il numero di occorrenze di quella stringa non è cambiato).
Con Git 2.25.1 (febbraio 2020), la documentazione viene chiarita attorno a queste regex.
Vedi commit 9299f84 (06 febbraio 2020) di Martin Ågren (``) .
(Unita da Junio C Hamano - gitster
- in commit 0d11410 , 12 febbraio 2020)
diff-options.txt
: evitare il sovraccarico "regex" nell'esempio
Segnalato da: Adam Dinwoodie
Firmato da: Martin Ågren.
Commentato da: Taylor Blau
Quando esemplificiamo la differenza tra -G
e -S
(usando --pickaxe-regex
), lo facciamo usando un esempio diff e git diff
invocazione che coinvolge "regexec", "regexp", "regmatch", ...
L'esempio è corretto, ma possiamo rendere più facile districare evitando di scrivere "regex. *" A meno che non sia realmente necessario per chiarire il nostro punto.
Usa invece alcune parole inventate, non regexy.
La git diff
documentazione ora include:
Per illustrare la differenza tra -S<regex> --pickaxe-regex
e
-G<regex>
, considerare un commit con la seguente diff nello stesso file:
+ return frotz(nitfol, two->ptr, 1, 0);
...
- hit = frotz(nitfol, mf2.ptr, 1, 0);
Mentre git log -G"frotz\(nitfol"
mostrerà questo commit, git log
-S"frotz\(nitfol" --pickaxe-regex
non lo farà (perché il numero di occorrenze di quella stringa non è cambiato).