2015-07-16 22 views
7

In che ordine fa il comando gitOrdine di commettere argomenti a git diff

git diff [--options] <commit> <commit> [--] [<path>…] 

confrontare le diverse impegna contro l'altro? Mi sembra di voler confrontare il nuovo con quello vecchio che ho bisogno di fare

git diff [--options] <New_commit> <Old_commit> per vedere il diff attuale?

faccio di solito git diff [--options] <Old_commit> <New_commit>

ma che sembra essere sbagliato?

Quando faccio per esempio

$ git diff `git rev-list --since="jun 30 2014" --reverse origin/master | head -1` `git rev-list --until="dec 31 2014" origin/master | head -1` --shortstat 

1072 files changed, 389650 insertions(+), 39180 deletions(-) 

Ma quando faccio

$ git diff --stat `git rev-list --until="dec 31 2014" origin/master | head -1` 

ottengo la stampa che:

384 files changed, 61255 insertions(+), 20526 deletions(-) 

Il che non è vicino 300000. Quindi la mia domanda è se dovessi inserire prima il nuovo commit e il vecchio commit, come:

$ git diff `git rev-list --until="dec 31 2014" origin/master | head -1`..`git rev-list --since="jun 30 2014" --reverse origin/master | head -1` 

Non riesco a trovare alcuna documentazione su in quale ordine dovrei inserire i commit per vedere la differenza tra il mio nuovo e il mio vecchio commit. Forse puoi chiarirlo per me?

Grazie in anticipo.

Edit: Il motivo che mi sto chiedendo è che voglio

  1. sapere quanti nuove linee di codice che è stato aggiunto un nuovo commit dato un vecchio commit, e

  2. Voglio calcolare il numero di righe di codice nel nuovo commit.

+0

Complimenti per la spiegazione basata sul delta :) – born4new

risposta

9

TL; DR

Nel git-diff sintassi seguente,

git diff [--options] <commit> <commit> [--] [<path>...] 
  • primo <commit> corrisponde alla base commettere,
  • secondo <commit> corrisponde impegnarsi per confrontare al commit di base.

Usando una notazione matematica ispirata,

git diff <x> <x+∆x> 

vi mostrerà la differenza ∆x, mentre

git diff <x+∆x> <x> 

vi mostrerà la differenza -∆x.

Nota che, poiché i due commit non devono essere ordinati in alcun modo, cronologicamente o topologicamente, chiamarli "vecchio" e "nuovo" (come fai tu) è un po 'fuorviante.

Maggiori dettagli

Si può imparare molto semplicemente guardando il git-diff man page. Sotto la descrizione sezione , troverete

git diff [--options] <commit> <commit> [--] [<path>...] 

Questo è quello di visualizzare le modifiche tra due arbitraria <commit>.

git diff HEAD^ HEAD 

:

scontato, che non si è che impegnano il quale, però, più in basso, sotto le Esempi sezione, troverete un paio di esempi illuminanti raccontano [...] Confrontare la versione prima dell'ultimo commit e l'ultimo commit.

e

git diff topic...master 

[...]

variazioni intervenute sul ramo principale da quando il ramo topic è stato iniziato fuori di esso.

+0

Questa è la cosa che non capisco. L'intuizione mi dice che voglio il git diff e mi dice che la differenza è 389650 inserimenti (+) dove faccio $ git diff -stat che è la differenza tra il progetto vuoto (inizio) e il commit corrente che ottengo 61255 inserzioni (+) (codice IE 61255). Quindi git diff non funziona come voglio farlo funzionare. – user1825441

+0

Wheras git diff mi dà che il repository ha aggiunto 40000 righe di codice e cancellato circa 300000 che è più logico dal mio punto di vista quindi non funziona nel modo in cui lo voglio. – user1825441