Encuentra las confirmaciones de git relacionadas con una determinada parte de un file

Caso
Muy a menudo me encuentro mirando un código viejo que no se ve bien. Parece que algo se ha eliminado (por ejemplo, tiene un bucle que no tiene valor, o crea una variable pero no la usa), o algo es difícil de entender. En estos casos, realmente necesitaría ver el historial de esa sección del file. No todo el file, solo esa sección o function.

Solución ideal
Un command simple como

git log books.cpp:10 

para encontrar la historia de la línea 10 (posiblemente con el entorno) de los libros de files.cpp es probablemente demasiado mágico para pedir, pero ¿tienes ideas de cómo resolver esa historia?

Lo que he intentado
Intenté usar la culpa y luego verificar el compromiso antes de la confirmación de esa línea, repitiéndolo hasta que haya visto suficiente. Pero ese es un trabajo muy tedioso.

¿Has sentido la necesidad de esta característica? ¿Tienes una forma de lograrlo? ¡Comparte tu experiencia!

Git es muy fácil de extender. ¿Algo como esto logra lo que quieres?

 #!/bin/bash FILENAME=$1 LINENUMBERS=$2 for hash in `git log --pretty=format:%h ${FILENAME}` do echo "***************** Showing ${FILENAME} at ${hash}" git blame -L ${LINENUMBERS} ${hash} ${FILENAME} done 

Pon este pequeño script en tu path como algo como git-linehistory y llámalo así:

 git linehistory books.cpp 5,15 

Le mostrará las líneas 5 a 15 en cada confirmación para ese file.

  • git blame -L opción git blame -L permite especificar un range de línea a salida, o incluso una expresión regular para que coincida con la function que desea.
  • También puede especificar culpar a un compromiso específico, entonces no tiene que verificar la revisión antes de la culpa.

En resumen, puede hacer llamadas sucesivas a la git blame -L range <commit> <file-name> para explorar el historial de cambios de línea por línea.