¿Hay alguna manera fácil de calcular el número de líneas cambiadas entre dos confirmaciones en git?
Sé que puedo hacer un git diff, y contar las líneas, pero esto parece tedioso. También me gustaría saber cómo puedo hacer esto, incluyendo solo mis propios commits en los conteos.

Respuestas:
Desea la
--statopción degit diff, o si está buscando analizar esto en un script, la--numstatopción.--statproduce la salida legible para humanos que estás acostumbrado a ver después de las fusiones;--numstatproduce un buen diseño de tabla que los scripts pueden interpretar fácilmente.De alguna manera extrañé que estuvieras buscando hacer esto en múltiples confirmaciones al mismo tiempo, esa es una tarea para
git log. Ron DeVera toca esto, pero en realidad puedes hacer mucho más de lo que menciona. Dado quegit logllama internamente a la maquinaria diff para imprimir la información solicitada, puede darle cualquiera de las opciones de estadísticas diff, no solo--shortstat. Lo que probablemente quiera usar es:pero puedes usar
--numstato--shortstattambién.git logTambién puede seleccionar confirmaciones de otras maneras: eche un vistazo a la documentación . Es posible que le interesen cosas como--since(en lugar de especificar rangos de compromiso, solo seleccione los compromisos desde la semana pasada) y--no-merges(los compromisos de combinación en realidad no introducen cambios), así como las opciones de salida bonitas (--pretty=oneline, short, medium, full...).Aquí hay una línea para obtener los cambios totales en lugar de los cambios por confirmación del registro de git (cambie las opciones de selección de confirmación según lo desee; esto es confirmaciones de usted, de commit1 a commit2):
(debe dejar que git log imprima cierta información de identificación sobre el compromiso; Elegí arbitrariamente el hash, luego usé awk para seleccionar solo las líneas con tres campos, que son los que tienen la información estadística)
fuente
git diff --shortstat <commit1> <commit2>Era el que yo quería.--sincey--untiles algo así como:yesterday,1 month 2 weeks 3 days 1 hour 1 second agoo1979-02-26 18:30:00<commit-ish>: funciona con cualquier cosa que represente una confirmación, incluidas las confirmaciones literales, ramas, etiquetas y referencias en general. Ver también stackoverflow.com/questions/23303549/…Para los perezosos, use
git log --stat.fuente
-10para mostrar las diez confirmaciones anteriores.Qpara volver al terminal.le da solo el número de líneas cambiadas y agregadas. Esto solo funciona con cambios no organizados. Para comparar contra una rama:
fuente
git add, asegúrese de hacerlogit diff --shortstat --cachedEDITAR: también debe especificar las confirmaciones (sin parámetros, compara el directorio de trabajo con el índice). P.ej
para comparar el padre de
HEADconHEAD.fuente
diff-index: ladiffinterfaz puede manejar todo; El caso dediff-indexestá cubierto por el--cached/--staged, creo. (Y no hay forma dediff-indexcomparar dos confirmaciones arbitrarias como lo solicitó el OP.)git diff --stat HEADHEAD~n, dondenes qué tan lejos desea retroceder.git diff --stat HEAD~5 HEADmostrará estadísticas combinadas de los últimos 5 commits en relación con HEAD.Suponiendo que desea comparar todas sus confirmaciones entre abcd123 (la primera confirmación) y wxyz789 (la última confirmación), inclusive:
Esto da una salida sucinta como:
fuente
--shortstatbandera es increíble,git diffaunque funciona (nogit log).Otra forma de obtener todos los registros de cambios en un período de tiempo específico
Salida:
Con un contenido de salida largo, puede exportar a un archivo para leerlo más
fuente
Aunque todas las respuestas anteriores son correctas, la siguiente es útil para usar si necesita contar las últimas confirmaciones
a continuación uno es para contar las últimas 5 confirmaciones
git diff $(git log -5 --pretty=format:"%h" | tail -1) --shortstatpara contar las últimas 10 confirmaciones
git diff $(git log -10 --pretty=format:"%h" | tail -1) --shortstatgenérico: cambie N con el recuento de las últimas confirmaciones que necesita
git diff $(git log -N --pretty=format:"%h" | tail -1) --shortstatpara contar todas las confirmaciones desde el inicio
git diff $(git log --pretty=format:"%h" | tail -1) --shortstatfuente
git log --numstat solo te da solo los números
fuente
Acabo de resolver este problema por mí mismo, así que compartiré lo que se me ocurrió. Aquí está el resultado final:
El comando subyacente se ve así:
Tenga
$@en cuenta el comando en el registro para transmitir sus argumentos como--author="Brian"o--since=yesterday.Escapar del awk para ponerlo en un alias git fue desordenado, así que en su lugar, lo puse en un script ejecutable en mi ruta (
~/bin/git-stat-sum), luego usé el script en el alias en mi.gitconfig:Y funciona muy bien. Una última cosa a tener en cuenta es que
file changeses la cantidad de cambios en los archivos, no la cantidad de archivos únicos modificados. Eso es lo que estaba buscando, pero puede que no sea lo que esperas.Aquí hay otro ejemplo o dos
Realmente, deberías poder reemplazar cualquier
git logcomando congit summary.fuente