2012-06-06 16 views
17

Sto scrivendo un piccolo script e voglio sapere quanti commit ho fatto su un ramo corrente da quando è stato creato.Numero di commit sul ramo in git

In questo esempio avrei 2 impegna realizzati su child:

git checkout master 
git checkout -b child 
... 
git commit -a 
... 
git commit -a 

Quindi quello che voglio è

commit_number = ... 
echo $commit_number 

Grazie per il vostro aiuto.

+0

possibile duplicato di [Numero di commit in un repository git] (http://stackoverflow.com/questions/1199312/number-of-commits-in-a-git-repository) –

+2

@ZoltanToth risposta dalla domanda restituita numero di commit dalla creazione del repository, non da quando è stato creato il ramo. –

+0

Per favore considera la mia risposta (supponendo meglio): https://stackoverflow.com/a/47133753/931908 –

risposta

40

Git può fornire il numero di commit senza ulteriori script di shell.

git rev-list master.. --count 

rev-list è un comando semi-nascosti (non elencati in git help) utilizzato per lavorare con revisioni.

As master.. elencherà i commit dalla base del master e il ramo corrente fino al ramo corrente, --count ti darà il conteggio di essi.

Se si desidera invece il numero di commit tra le due revisioni, utilizzare master.... Elaborare: tra come dal master al più recente antenato del master e il ramo attuale (HEAD), e fino al ramo attuale di nuovo. Se visualizzi la cronologia del commit come un albero dovresti essere in grado di seguire i due rami dell'antenato comune. master.. d'altra parte conterà solo uno dei due rami.

Quindi, se si desidera utilizzare master.. o master... dipende dal fatto che si vuole sapere quante commit hai fatto nel ramo poiché si divide off (master..), o la differenza tra il corrente master e ramo , il numero di commit nel master e il ramo da quando il ramo è stato scisso.

+3

Questa è una soluzione migliore rispetto alla risposta accettata, anche se metterei l'opzione prima delle commit: 'git rev- list --count master..' –

+0

Risposta migliore in quanto copre anche piattaforme non * nix. – gnuchu

15

Supponendo che si diramazione dal master, master..yourbranch fornisce l'intervallo di commit che si trova in yourbranch ma non nel master.

Poi devi solo elencarli una linea ciascuna, e contare il numero di linee:

git log master..yourbranch --pretty=oneline | wc -l 
7

Aggiornamento: git rev-lista ha ora --count:

git rev-list --count master.. 

Con più vecchio versioni git:

git rev-list master.. |wc -l 

rev-list l revisioni di un numero e master.. si riferisce a si impegna poiché l'attuale HEAD è diverso da master.

+1

Ho dovuto usare questo per essere compatibile con le versioni di 'git rev-list' abbastanza vecchie da non avere l'interruttore '--count' –

+0

@ChuckWilbur grazie per il commento, ho aggiunto' --count' alla risposta – user1338062

Problemi correlati