Sinopsis
git grep [<options>] <pattern> [<tree-ish>...]
Descripción
El comando git grep busca un patrón en archivos rastreados por Git. Es mucho más rápido que grep -r en repositorios grandes porque solo busca lo que Git conoce (saltándose .git, salidas de build y archivos ignorados) y usa la base de datos de objetos optimizada de Git. También puedes buscar cualquier revisión histórica o tree, no solo la copia de trabajo.
Los patrones pueden ser cadenas planas, regex básico (predeterminado), regex extendido (-E) o PCRE (-P si está compilado). Usa git grep en lugar de grep -r en scripts que operan sobre repositorios Git.
En el uso diario, este comando se integra estrechamente con alias de shell, plugins de editor e integración continua. Los usuarios avanzados a menudo añaden alias que combinan los flags que siempre pasan. El formato de salida puede personalizarse vía configuración de Git. Cuando algo sale mal, ejecuta el comando con GIT_TRACE=1 para revelar las llamadas plumbing subyacentes.
Entender cómo este comando interactúa con el resto del modelo de datos de Git rinde dividendos. Cada comando opera sobre algún subconjunto de las piezas (objetos, index, refs, árbol de trabajo), y saber cuáles toca ayuda a predecir resultados y a recuperarse de errores.
Opciones comunes
| Opción | Descripción |
|---|---|
-i | Case-insensitive match. |
-n | Show line numbers. |
-l | List only matching file names. |
-E | Extended regular expressions. |
-P | Perl-compatible regex. |
-w | Match whole words. |
--cached | Search the index instead of the working tree. |
--untracked | Also search untracked, non-ignored files. |
Ejemplos
git grep "TODO"
# Find every TODO in tracked files
git grep -n -i "deprecated" src/
# Case-insensitive, with line numbers, under src/
git grep "fooBar" v1.0.0
# Search the v1.0.0 tag's tree
git grep -E "^(import|from) " --and -e "json"
# Combined patterns: lines starting with import/from that mention json
Errores comunes
Forgetting that git grep only searches tracked files — newly added files won't appear unless staged or you pass --untracked. PCRE features (\b, lookbehind) require Git built with PCRE support and the -P flag.
Comandos relacionados
git log -S, git log -G, git ls-files, git show