tutorial mac gui for español descargar commands git

mac - git repository



¿Cómo puedo "culpar" a una línea eliminada? (3)

git blame es ideal para líneas modificadas y agregadas, pero ¿cómo puedo encontrar cuándo se eliminó una línea que existía en una confirmación previa específica? Estoy pensando en bisect pero esperaba algo más práctico.

[antes de preguntar: en el caso, acabo de hacer un git log -p y busqué la línea del código y (a) un idiota acababa de eliminar la línea vital en el commit anterior y (b) yo era ese idiota]


Creo que lo que realmente quieres es

git blame --reverse START..END filename

De la página del manual :

Camina la historia hacia adelante en lugar de hacia atrás. En lugar de mostrar la revisión en la que apareció una línea, muestra la última revisión en la que ha existido una línea. Esto requiere un rango de revisión como START..END donde el camino a culpar existe en START.

Con git blame reverse , puede encontrar la última confirmación en la que apareció la línea. Aún necesita obtener la confirmación que viene después.

Puede usar el siguiente comando para mostrar un registro git invertido. La primera confirmación mostrada será la última vez que aparezca esa línea, y la próxima confirmación será cuando se cambie o elimine.

git log --reverse --ancestry-path COMMIT^..master


Si conoce el contenido de la línea, este es un caso de uso ideal para:

git log -S <string> path/to/file

que muestra los compromisos que introducen o eliminan una instancia de esa cadena. También está el -G<regex> que hace lo mismo con las expresiones regulares. Consulte man git-log y busque las opciones -G y -S , o pickaxe (el nombre descriptivo de estas funciones) para obtener más información.

La opción -S se menciona en el encabezado de la página de git-blame , en la sección de descripción, donde se muestra un ejemplo utilizando git log -S...


git blame --reverse puede acercarte a donde se borra la línea. Pero en realidad no apunta a la revisión donde se elimina la línea. Apunta a la última revisión donde estaba presente la línea. Luego, si la siguiente revisión es una confirmación simple, tiene suerte y obtuvo la revisión de eliminación. OTOH, si la siguiente revisión es una confirmación de fusión , entonces las cosas pueden ponerse un poco salvajes. Como parte del esfuerzo por crear una avería , resolví este mismo problema, así que si ya tiene Python instalado en su caja y está dispuesto a intentarlo, no espere más y hágame saber cómo va.

https://github.com/eantoranz/difflame