2012-03-29 11 views
42

"git diff --stat" e "git log --stat" mostra le cose come:C'è un modo per aggiungere git show, linee modificate e linee rimosse?

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

Ma ciò che è realmente accaduto in quel commit era che 4 linee sono state modificate e 26 linee sono state cancellate, che è diverso da quello aggiungendo 4 righe e cancellando 30.

C'è un modo per ottenere le LOC delta (26 in questo caso)? Non mi interessa davvero distinguere tra le righe aggiunte o rimosse.

risposta

45

È possibile utilizzare:

git diff --numstat 

per ottenere informazioni diff numerica.

Per quanto riguarda la separazione delle modifiche da una coppia di add e remove, --word-diff potrebbe essere di aiuto. Si potrebbe provare qualcosa di simile:

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 

E 'un po' prolisso quindi si consiglia di analizzare nel proprio script, invece.

+0

Grazie quornian ma numstat dà esattamente le stesse informazioni di stat, aggiunte e cancellazioni . –

+0

Ho aggiornato la mia risposta per includere un esempio di uso di '--word-diff'. Potrebbe essere più utile. – quornian

+0

Grazie! La tua risposta modificata è ottima. Volevo vedere quante righe sono state aggiunte/modificate/rimosse tra due commit specifici. Agli altri che potrebbero voler fare lo stesso, basta mettere i nomi dei rami nel comando, come in: 'git diff commit1 commit2 --word-diff ...' dove commit1/2 sono SHA1s, rami, tag, ecc. –

1

git utilizza diff "unificato", che ha solo righe aggiunte e cancellate, come il formato diff. Devi fare qualcosa di esterno per ottenere un diff che mostra aggiungere, eliminare e modificare le informazioni.

https://wiki.postgresql.org/wiki/Working_with_Git#Context_diffs_with_Git fornisce collegamenti a uno script che consente di eseguire normali "diff" vecchi e da cui è possibile generare un output "context" diff. La differenza di contesto mostra linee aggiunte, rimosse e modificate, che dovrebbero consentire di ottenere i dati desiderati.

13
  1. Se volete sapere le linee aggiunto/modificato/cancellato da un commit con id commit-id, è possibile utilizzare

    git show commit-id --stat 
    

    o

    git diff commit-id-before commit-id --stat 
    
  2. Se wat Conoscere le linee aggiunte/modificate/eliminate da un intervallo commette, è possibile utilizzare

    git diff commit-id1 commit-id2 --stat 
    
  3. Se volete sapere le linee aggiunte/modificato/cancellato dallo ogni commit, si potrebbe usare

    git log --stat 
    
Problemi correlati