Sinopsis
git blame [-L <range>] [-w] [-M] [-C] <file>
Descripción
El comando git blame anota cada línea de un archivo con el commit, autor y timestamp que la tocó por última vez. Es invaluable para entender por qué una pieza de código se ve como se ve, quién la introdujo y cuándo. A pesar del nombre acusatorio, blame se usa principalmente como herramienta de investigación, no como medio para señalar culpables.
Blame puede seguir código a medida que se movió o copió (con -M y -C), y puede ignorar commits solo de espacios o solo de formato si mantienes un archivo .git-blame-ignore-revs referenciado vía blame.ignoreRevsFile.
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 |
|---|---|
-L <start>,<end> | Restrict blame to a line range. |
-w | Ignore whitespace changes. |
-M | Detect lines moved within a file. |
-C | Detect lines copied from other files (repeat for stronger detection). |
--since=<date> | Stop annotating earlier than this date. |
-e, --show-email | Show author email instead of name. |
--ignore-revs-file <file> | Skip listed revisions when assigning blame. |
Ejemplos
git blame src/parser.c
# Annotate every line
git blame -L 50,100 src/parser.c
# Just lines 50 through 100
git blame -w -M -C README.md
# Ignore whitespace and detect moves/copies
git blame --ignore-revs-file .git-blame-ignore-revs file.js
# Skip noisy formatting commits
Errores comunes
Using blame to assign fault rather than to investigate context creates a hostile culture. Pair blame with git log on the offending commit to read the full message and intent. After mass formatting, set up .git-blame-ignore-revs so blame still points to meaningful authors.
Comandos relacionados
git log -L, git log -S, git show, git annotate