2012-03-29 23 views
42

"git diff --stat" y "git log --stat" muestra cosas como:¿Hay alguna manera de agregar líneas de presentación de git, cambiar líneas y eliminar líneas?

$ git diff -C --stat HEAD c9af3e6136e8aec1f79368c2a6164e56bf7a7e07 
app/controllers/application_controller.rb | 34 +++------------------------- 
1 files changed, 4 insertions(+), 30 deletions(-) 

Pero lo que realmente sucedió en la que asignan fue que 4 líneas fueron cambiadas y 26 líneas fueron borrados que es diferente agregar 4 líneas y eliminar 30.

¿Hay alguna forma de obtener los LOC delta (26 en este caso)? Realmente no me importa diferenciar entre líneas agregadas o eliminadas.

Respuesta

45

Se puede utilizar:

git diff --numstat 

para obtener información numérica diff.

En cuanto a separar la modificación de un par de agregar y eliminar, --word-diff podría ayudar. Usted podría intentar algo como esto:

MOD_PATTERN='^.+(\[-|\{\+).*$' 
ADD_PATTERN='^\{\+.*\+\}$' 
REM_PATTERN='^\[-.*-\]$' 
git diff --word-diff --unified=0 | sed -nr \ 
    -e "s/$MOD_PATTERN/modified/p" \ 
    -e "s/$ADD_PATTERN/added/p" \ 
    -e "s/$REM_PATTERN/removed/p" \ 
    | sort | uniq -c 

Es un poco largo aliento por lo que es posible que desee analizar en su propio guión en su lugar.

+0

Gracias quornian pero numstat da exactamente la misma información que stat, adiciones y supresiones . –

+0

Actualicé mi respuesta para incluir un uso de ejemplo de '--word-diff'. Eso podría ser más útil. – quornian

+0

¡Gracias! Tu respuesta editada es genial. Quería ver cuántas líneas se agregaron/modificaron/eliminaron entre dos confirmaciones específicas. Para otros que deseen hacer lo mismo, simplemente pongan los nombres de las ramas en el comando, como en: 'git diff commit1 commit2 --word-diff ...' donde commit1/2 son SHA1, ramas, etiquetas, etc. –

1

git utiliza diff "unificado", que solo tiene líneas agregadas y eliminadas, como el formato de diferencia. Tienes que hacer algo externo para obtener un diff que muestre agregar, eliminar y cambiar información.

https://wiki.postgresql.org/wiki/Working_with_Git#Context_diffs_with_Git proporciona enlaces a un script que permite ejecutar el antiguo "diff" normal, y a partir de eso puede generar un resultado de "context" diff. Context diff muestra las líneas agregadas, eliminadas y modificadas, que deberían permitirle obtener los datos que desea.

13
  1. Si desea conocer las líneas añadido/cambiado/eliminado por un comprometerse con Identificación commit-id, podría utilizar

    git show commit-id --stat 
    

    o

    git diff commit-id-before commit-id --stat 
    
  2. Si usted wat a saber las líneas agregadas/cambiadas/eliminadas por un rango commits, puede usar

    git diff commit-id1 commit-id2 --stat 
    
  3. Si desea conocer las líneas añadidas/cambiado/eliminado por cada confirmación, podría utilizar

    git log --stat 
    
Cuestiones relacionadas