Ottieni l'hash della versione breve di Git


382

Esiste un modo più pulito per ottenere l'hash della versione breve di HEADGit?

Voglio vedere lo stesso output che ottengo da:

 git log -n 1 | head -n 1 | sed -e 's/^commit //' | head -c 8

Inizialmente ho usato il comando sopra per generare una stringa di versione, ma è ancora meglio:

git describe --tags

Produrrà stringhe come 0.1.12(commit con tag) o 0.1.11-5-g0c85fbc(cinque commit dopo il tag).


2
Dato che sembri essere bravo a manipolare i dati con pipe e quant'altro, dovresti conoscere gli alias git . In questo caso, c'è un comando per quello che vuoi (vedi le risposte) ma alla fine troverai qualcosa dove non c'è, e gli alias sono fantastici per quello.
MatrixFrog,

@ MatrixFrog grazie per il suggerimento! Avevo già alcuni semplici alias git, ma non sapevo quanto potessero essere potenti fino ad ora. Mi piace particolarmente la visualizzazione di graphviz.
Attila O.

1
Huh. Quando corro git describe --tagsricevo il messaggio "fatale: nessun nome trovato, non posso descrivere nulla". .
Quinn Comendant,

@QuinnComendant Probabilmente dovrai prima taggare qualcosa per --tagsfunzionare. Prova a creare prima un tag ; es git tag 1.0.0.
Attila O.

Un possibile duplicato di git ottiene un hash breve
dall'hash

Risposte:


697

Prova questo:

git rev-parse --short HEAD

Il comando git rev-parsepuò fare un numero notevole di cose diverse, quindi dovresti esaminare attentamente la documentazione per individuarla.


4
puoi fare il contrario e ottenere il lungo hash di commit dal breve hash di commit procedendo come seguegit rev-parse HEAD
Andy,

9
Il comando funziona anche con ID rev lunghi che vengono copiati e incollati da altre fonti come git log, ad esempio, git rev-parse --short 97dd2ae065771908ee9ae0fa08ccdb58b5a6b18fresi97dd2ae
chiborg

3
Funziona solo con i riferimenti. Puoi usare HEAD, nomi di tag, nomi di rami o hash semplici.
d12 congelato il

1
Attenzione, questo restituisce un hash di commit di 7 caratteri (di default) mentre molti posti come gitlab usano 8 caratteri!
masterxilo,

3
È possibile utilizzare git rev-parse --short=8 HEADper ottenere la lunghezza di 8 caratteri utilizzata da GitLab. Puoi anche impostare core.abbrev8 per un repository git specifico con un comando come git config core.abbrev 8 Source
n8felton

112

Puoi fare praticamente qualsiasi formato desideri --pretty=format:

git log -1 --pretty=format:%h 

70
git log -1 --abbrev-commit

lo farà anche.

git log --abbrev-commit

elencherà le voci del registro con checksum SHA-1 abbreviato.


1
Il secondo è esattamente quello che stavo cercando! Molto semplice da ricordare e utile nella vita quotidiana.
iFreilicht,

Funziona anche con git log --pretty=oneline, a differenza di --oneline, altrimenti stampa hash full size.
sdaau,

46

Un modo semplice per visualizzare la versione breve di commit Git e il messaggio di commit Git è:

git log --oneline

Si noti che questa è una scorciatoia per

git log --pretty=oneline --abbrev-commit

1
--oneline è l'opzione migliore
Juan Ignacio Barisich,

1
@JuanIgnacioBarisich l'opzione migliore dipende dalla quantità di informazioni che è necessario visualizzare. Nel caso in cui siano necessarie ulteriori informazioni come autore o data, git log --abbrev-commit sarebbe un'opzione migliore. anche log --pretty potrebbe essere un'opzione migliore per scegliere quali informazioni registrare
velocity il

35

Un modo davvero semplice è:

git describe --always

1
ah, dolce, che affronta i casi in cui git descriverà altrimenti non funzionerà (perché descrivono si aspetta un tag da qualche parte nella storia) grazie
acuto

8
Non va bene se si desidera rigorosamente l'hash breve - poiché questo può restituire un tag annotato ce n'è uno.
Zitrax,

In alcuni casi git describe --longpotrebbe aiutare. Dai documenti : " Emetti sempre il formato lungo (il tag, il numero di commit e il nome del commit abbreviato) anche quando corrisponde a un tag ." [enfasi]
djvg

Usare --longè meglio ma a volte si ottiene un hash breve e talvolta 3 elementi separati da trattini. In questi giorni, utilizzo la risposta accettata. Ai tempi, non sapevo dei tag annotati - forse non esistevano nemmeno!
Steven Shaw,

16

Ramo con hash corto e ultimo commento:

git branch -v

  develop      717c2f9 [ahead 42] blabla
* master       2722bbe [ahead 1] bla

10

Ho Git versione 2.7.4 con le seguenti impostazioni:

git config --global log.abbrevcommit yes
git config --global core.abbrev 8

Ora quando lo faccio:

git log --pretty=oneline

Ricevo un ID di commit abbreviato di otto cifre:

ed054a38 add project based .gitignore
30a3fa4c add ez version
0a6e9015 add logic for shifting days
af4ab954 add n days ago
...

1
Mentre questo codice può rispondere alla domanda, fornendo un contesto aggiuntivo riguardo a come e perché risolve il problema, migliorerebbe il valore a lungo termine della risposta.
SherylHohman

1
Grande idea. Lo apprezzo molto, Sheryl
Down the Stream

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.