2010-03-27 12 views

Respuesta

737

Desea la opción --stat de git diff, o si está buscando analizar esto en una secuencia de comandos, la opción --numstat.

git diff --stat <commit-ish> <commit-ish> 

--stat produce la salida legible por humanos que estamos acostumbrados a ver después de fusiones; --numstat produce un buen diseño de tabla que los scripts pueden interpretar fácilmente.

De alguna manera me perdí de que estabas buscando hacer esto en varias 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 él menciona. Como el git log llama internamente a la maquinaria de diff para imprimir la información solicitada, puede darle cualquiera de las opciones de estadísticas diferentes, no solo --shortstat. Lo que es probable que desee utilizar es:

git log --author="Your name" --stat <commit1>..<commit2> 

pero se puede utilizar --numstat o --shortstat también. git log también puede seleccionar confirmaciones de otras maneras: eche un vistazo al documentation. Es posible que le interesen cosas como --since (en lugar de especificar intervalos de confirmación, solo seleccione confirmaciones desde la semana pasada) y --no-merges (las confirmaciones de fusión en realidad no introducen cambios), así como las bonitas opciones de salida (--pretty=oneline, short, medium, full...).

Aquí hay una sola línea para conseguir cambios totales en lugar de por cada confirmación cambios de git log (cambiar las opciones de selección cometer según se desee - esto es commits que, desde commit1 a commit2):

git log --numstat --pretty="%H" --author="Your Name" commit1..commit2 | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("+%d, -%d\n", plus, minus)}' 

(tiene que dejar que git log imprima alguna información de identificación sobre la confirmación; escogí 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)

+0

¿Hay alguna manera de incluir solo mis propios commits? – Mike

+2

@Mike: editado en! – Cascabel

+0

Esto no responde a la pregunta original sobre "líneas modificadas". El cambio de una línea se calcula como línea insertada y eliminada. El cálculo del número de líneas cambiadas requiere más trabajo que el descrito aquí. –

32
git diff --stat commit1 commit2 

EDIT: Se tiene que especificar los compromete también (sin parámetros se compara el directorio de trabajo con el índice). P.ej.

git diff --stat HEAD^ HEAD 

comparar la matriz de HEAD con HEAD.

+1

Nunca hay necesidad de usar 'diff-index' - la interfaz' diff' puede manejar todo; el caso de 'diff-index' está cubierto por' -cached/- stage ', creo. (Y no hay forma de usar 'diff-index' para comparar dos commits arbitrarios como lo hizo OP). – Cascabel

+0

El resultado de esto no es nada para mí. – Mike

+0

@Mike: ¿dejaste un quilate? ¿Tu commit más reciente fue una combinación? Si git dice que no hay diferencias, es porque no hay diferencias. – Cascabel

14

Suponiendo que desea comparar todas sus confirmaciones entre abcd123 (la primera confirmación) y wxyz789 (la última confirmación), inclusive:

git log wxyz789^..abcd123 --oneline --shortstat --author="Mike Surname" 

Esto da salida sucinta como:

abcd123 Made things better 
3 files changed, 14 insertions(+), 159 deletions(-) 
wxyz789 Made things more betterer 
26 files changed, 53 insertions(+), 58 deletions(-) 
+0

El resultado de esto no es nada para mí (he realizado commits y verificado --author es correcto al usarlo con git log y sin otros argumentos). – Mike

+0

Esto me pasó a mí también. Las dos confirmaciones estaban en el orden incorrecto, intercambiándolas por la solución. –

+1

Actualizó la orden de compromiso y aclaró qué representan los dos SHA. Gracias por atraparlo :) –

127

para los perezosos, git log --stat;)

+18

También funciona con 'git log --shortstat' también. – hazrpg

+6

Encontré esto útil, agregué un '-10' para mostrar las diez confirmaciones anteriores. – meetalexjohnson

+0

¡La gente perezosa te agradece! –

45

git diff --shortstat

le da sólo el número de líneas cambiaron y agregaron.

+5

justo lo que estaba buscando, el resultado es algo así como '655 archivos modificados, 22619 inserciones (+), 22558 eliminaciones (-)' – Daniel

+1

Parece que esto responde mejor a la pregunta que la respuesta aceptada. –

3

Otra forma de obtener toda registro de cambios en un período de tiempo especificado

git log --author="Tri Nguyen" --oneline --shortstat --before="2017-03-20" --after="2017-03-10" 

Salida:

2637cc736 Revert changed code 
1 file changed, 5 insertions(+), 5 deletions(-) 
ba8d29402 Fix review 
2 files changed, 4 insertions(+), 11 deletions(-) 

Con un contenido de salida larga, puede exportar para solicitar más legible

git log --author="Tri Nguyen" --oneline --shortstat --before="2017-03-20" --after="2017-03-10" > /mnt/MyChangeLog.txt 
Cuestiones relacionadas