¿Hay alguna manera fácil de calcular el número de líneas modificadas 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 compromisos en los recuentos de líneas.¿Cómo puedo calcular el número de líneas modificadas entre dos confirmaciones en git?
Respuesta
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)
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
.
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
El resultado de esto no es nada para mí. – Mike
@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
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(-)
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
Esto me pasó a mí también. Las dos confirmaciones estaban en el orden incorrecto, intercambiándolas por la solución. –
Actualizó la orden de compromiso y aclaró qué representan los dos SHA. Gracias por atraparlo :) –
para los perezosos, git log --stat
;)
También funciona con 'git log --shortstat' también. – hazrpg
Encontré esto útil, agregué un '-10' para mostrar las diez confirmaciones anteriores. – meetalexjohnson
¡La gente perezosa te agradece! –
git diff --shortstat
le da sólo el número de líneas cambiaron y agregaron.
justo lo que estaba buscando, el resultado es algo así como '655 archivos modificados, 22619 inserciones (+), 22558 eliminaciones (-)' – Daniel
Parece que esto responde mejor a la pregunta que la respuesta aceptada. –
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
- 1. Git: presionando confirmaciones modificadas
- 2. ¿Cómo puedo calcular el número de años entre dos fechas?
- 3. Calcular el número de días hábiles entre dos días
- 4. Calcular el número de diferencias entre dos NSStrings
- 5. ¿Cómo puedo obtener la diferencia entre todas las confirmaciones que ocurrieron entre dos fechas con Git?
- 6. ¿Cómo puedo calcular el número de días entre dos fechas en Perl?
- 7. Java, calcular el número de días entre dos fechas
- 8. Cuenta el número de confirmaciones en una rama de Git
- 9. Cómo calcular el número de líneas de código fuente
- 10. ¿Cómo puedo calcular una diferencia entre dos cadenas?
- 11. Resaltar líneas modificadas en Eclipse
- 12. ¿Cómo puedo calcular la distancia entre dos puntos en MkMapview?
- 13. ¿Cómo puedo encontrar el número de años entre dos fechas?
- 14. Obtener lista de confirmaciones entre etiquetas en git
- 15. ¿Cómo puedo sombrear una región entre dos líneas en flot?
- 16. Calcular el número de horas entre 2 fechas en PHP
- 17. Mostrar las diferencias sin combinar para dos confirmaciones en git
- 18. Número de confirmaciones en la rama en git
- 19. JavaScript: Cómo calcular el número de días entre dos fechas usando javascript
- 20. Git número de confirmaciones por autor en todas las sucursales
- 21. ¿Cómo obtener una lista de todos los archivos que cambiaron entre dos confirmaciones de Git?
- 22. Calcular el tiempo entre dos tiempos Android
- 23. distanceFromLocation - Calcular la distancia entre dos puntos
- 24. ¿Cómo enumerar solo ramas activas/recientemente modificadas en git?
- 25. El ángulo entre dos líneas es incorrecto
- 26. ¿Cómo puedo ver las confirmaciones entrantes en git?
- 27. ¿Cómo puedo eliminar los espacios en blanco finales solo en las líneas modificadas en un enganche git precompuesto?
- 28. ¿Cómo crear un parche entre dos etiquetas con múltiples confirmaciones entre ellas?
- 29. ¿Cómo compruebo dos confirmaciones no consecutivas?
- 30. Git: Cómo moverse hacia atrás y hacia adelante entre confirmaciones
¿Hay alguna manera de incluir solo mis propios commits? – Mike
@Mike: editado en! – Cascabel
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í. –