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 -Gper impostazione predefinita accetta una regex, mentre -Saccetta una stringa, ma può essere modificato per accettare regex utilizzando il --pickaxe-regex.
Per illustrare la differenza tra -S<regex> --pickaxe-regexe -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-regexnon 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 -Ge -S(usando --pickaxe-regex), lo facciamo usando un esempio diff e git diffinvocazione 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 diffdocumentazione ora include:
Per illustrare la differenza tra -S<regex> --pickaxe-regexe
-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-regexnon lo farà (perché il numero di occorrenze di quella stringa non è cambiato).