¿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
--stat
opción degit diff
, o si está buscando analizar esto en un script, la--numstat
opción.--stat
produce la salida legible para humanos que estás acostumbrado a ver después de las fusiones;--numstat
produce 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 log
llama 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
--numstat
o--shortstat
también.git log
Tambié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.--since
y--until
es algo así como:yesterday
,1 month 2 weeks 3 days 1 hour 1 second ago
o1979-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
-10
para mostrar las diez confirmaciones anteriores.Q
para 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 --cached
EDITAR: también debe especificar las confirmaciones (sin parámetros, compara el directorio de trabajo con el índice). P.ej
para comparar el padre de
HEAD
conHEAD
.fuente
diff-index
: ladiff
interfaz puede manejar todo; El caso dediff-index
está cubierto por el--cached/--staged
, creo. (Y no hay forma dediff-index
comparar dos confirmaciones arbitrarias como lo solicitó el OP.)git diff --stat HEAD
HEAD~n
, donden
es qué tan lejos desea retroceder.git diff --stat HEAD~5 HEAD
mostrará 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
--shortstat
bandera es increíble,git diff
aunque 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) --shortstat
para contar las últimas 10 confirmaciones
git diff $(git log -10 --pretty=format:"%h" | tail -1) --shortstat
genérico: cambie N con el recuento de las últimas confirmaciones que necesita
git diff $(git log -N --pretty=format:"%h" | tail -1) --shortstat
para contar todas las confirmaciones desde el inicio
git diff $(git log --pretty=format:"%h" | tail -1) --shortstat
fuente
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 changes
es 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 log
comando congit summary
.fuente