Por Anónimo (no verificado) , 29 Abril 2026

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ónDescripción
-L <start>,<end>Restrict blame to a line range.
-wIgnore whitespace changes.
-MDetect lines moved within a file.
-CDetect lines copied from other files (repeat for stronger detection).
--since=<date>Stop annotating earlier than this date.
-e, --show-emailShow 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