Sinossi
git grep [<options>] <pattern> [<tree-ish>...]
Descrizione
Il comando git grep cerca file tracciati da Git per un pattern. È molto più veloce di grep -r su repository grandi perché cerca solo ciò che Git conosce (saltando .git, output di build e file ignorati) e usa il database degli oggetti ottimizzato di Git. Puoi anche cercare in qualsiasi revisione storica o tree, non solo nella copia di lavoro.
I pattern possono essere stringhe semplici, regex base (default), regex estese (-E) o PCRE (-P se compilato). Usa git grep invece di grep -r in script che operano su repository Git.
Nell'uso quotidiano, git grep si integra con alias e CI.
Capire il modello dati di Git aiuta a prevedere i risultati.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
-i | Match case-insensitive. |
-n | Mostra numeri di riga. |
-l | Elenca solo i nomi dei file che fanno match. |
-E | Espressioni regolari estese. |
-P | Regex Perl-compatible. |
-w | Match parole intere. |
--cached | Cerca nell'index invece che nella working tree. |
--untracked | Cerca anche file untracked non ignorati. |
Esempi
git grep "TODO"
# Trova ogni TODO nei file tracciati
git grep -n -i "deprecated" src/
# Case-insensitive, con numeri di riga, sotto src/
git grep "fooBar" v1.0.0
# Cerca nel tree del tag v1.0.0
git grep -E "^(import|from) " --and -e "json"
# Pattern combinati: righe che iniziano con import/from che menzionano json
Errori comuni
Dimenticare che git grep cerca solo file tracciati — i file appena aggiunti non appariranno a meno che siano in stage o tu passi --untracked. Le funzionalità PCRE (\b, lookbehind) richiedono Git compilato con supporto PCRE e il flag -P.
Comandi correlati
git log -S, git log -G, git ls-files, git show