git blame

Depuración

Mostrar quién cambió por última vez cada línea de un archivo


El comando 'git blame' imprime un archivo con, para cada línea, el commit que la cambió por última vez, su autor y su fecha. Es la forma más rápida de saber por qué una línea es así: toma el hash y luego lee el commit completo con git show. Las líneas que aún no confirmaste aparecen como «Not Committed Yet». Usa -L para mirar solo unas líneas.

Sinopsis

git blame [<options>] [<rev>] [--] <file>
[ ] opcional| o<arg> valor a sustituir... repetible--flag opción

Opciones

Haz clic en una opción para desplegarla

Principiante (2)

Anota solo el rango de líneas indicado, p. ej. -L 10,20 (o una función con -L :nombre).

RecomendadoCéntrate en las líneas que estás investigando

Ejemplo

git blame -L 12,14 app.js

Muestra el correo del autor en lugar del nombre.

Cuando haga faltaMostrar el correo de los autores cuando los nombres son ambiguos

Ejemplo

git blame -e app.js

Avanzado (1)

Hace como si un commit (p. ej. un gran reformateo) no hubiera cambiado nada; atribuye las líneas a commits anteriores.

Cuando haga faltaSaltar commits de solo formato

Ejemplo

git blame --ignore-rev a1b2c3d app.js

Elegir la opción adecuada

Encontrar de dónde vino un cambio

Tres herramientas, tres preguntas

ComandoResponde
git blame file¿Qué commit tocó cada línea por última vez?
git log -p fileCada cambio hecho alguna vez al archivo
git log -S "text"¿Qué commit añadió o quitó este texto?

Ejemplos

Blame de un archivo

git blame app.js

Cada línea con su último commit, autor y fecha.


Un rango de líneas

git blame -L 10,20 app.js

Solo las líneas 10 a 20.


Una versión anterior

git blame v1.0 -- app.js

Blame del archivo tal como estaba en el tag v1.0.

Ejemplos de flujos de trabajo

1
git blame -L 40,45 app.js

Encontrar el commit de la línea

2
git show a1b2c3d

Leer el commit completo y su mensaje

Solución de problemas

fatal: no such path 'x' in HEAD

Causa: El archivo no tiene seguimiento, o la ruta es incorrecta

Confirma primero el archivo, o revisa la ruta

Todas las líneas apuntan a un commit de reformateo

Causa: Blame muestra el ÚLTIMO cambio

Usa --ignore-rev <commit>, o haz blame del commit anterior

Consejos y trampas

Buenas prácticas

  • ✓Lee el commit (git show) antes de sacar conclusiones de blame.
  • ✓Mantén un archivo .git-blame-ignore-revs con los commits de solo formato.

Errores comunes

  • ✗Tomar blame como culpa: la última persona que tocó una línea quizá solo la reformateó.
  • ✗Detenerse en un commit de formato en lugar de hacer blame de su padre (git blame <hash>^ -- file).
  • ✗Olvidar -L en archivos grandes y desplazarse por miles de líneas.

Preguntas frecuentes

A:

La línea viene del primer commit del historial: blame no pudo ir más atrás.

A:

Una línea que cambiaste en tu copia de trabajo pero aún no confirmaste.