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

Por qué blame

Blame responde "¿quién escribió esta línea y por qué?" — la puerta de entrada para excavar la historia cuando algo parece mal, sospechoso o sorprendentemente inteligente.

Lo básico

git blame src/checkout.js
git blame -L 40,60 src/checkout.js

Seguir código movido

git blame -M src/checkout.js     # seguir movimientos en el archivo
git blame -C src/checkout.js     # seguir movimientos entre archivos
git blame -CCC src/checkout.js   # detección agresiva entre archivos

Ignorar commits ruidosos

# .git-blame-ignore-revs
abc1234567890   # Aplicar prettier al codebase
def4567890123   # Aplicar black a todo Python
git blame --ignore-revs-file=.git-blame-ignore-revs src/checkout.js
git config blame.ignoreRevsFile .git-blame-ignore-revs

Blame por contenido

git log -S 'EMAIL_REGEX' -- src/
git log -G 'email.*regex' --pickaxe-regex -- src/

Buscar una regresión

git blame -L 40,60 src/checkout.js
git show <sha>
git log --follow -p src/checkout.js
git bisect start
git bisect bad HEAD
git bisect good <earlier-sha>

Vistas anotadas en editores

GitLens de VS Code, annotate integrado de JetBrains y fugitive.vim de Vim ofrecen blame interactivo.

Blame inverso

git log --reverse --follow -p -L 40,60:src/checkout.js

Blame sin historia

git blame --line-porcelain src/checkout.js | \
  sed -n 's/^author //p' | sort | uniq -c | sort -rn

Etiqueta

Blame es para entender, no para señalar con el dedo.