2010-12-28 20 views
55

Ho visto i comandi git describe e git-name-rev ma non sono riuscito a farli elencare più di un tag.Come elencare tutti i tag che puntano a un commit specifico in git

Esempio: ho lo sha1 48eb354 e so che i tag A e B lo indicano. Quindi voglio un comando git git {something} 48eb354 che produca un output simile a "A, B". Non sono interessato a conoscere riferimenti relativi ad altri tag o rami solo corrispondenze esatte per i tag.

risposta

33

git show-ref --tags -d | grep ^48eb354 | sed -e 's,.* refs/tags/,,' -e 's/\^{}//'

dovrebbe funzionare per entrambi i tag leggeri e annotati.

+0

Grazie, funziona! – Zitrax

+0

Grazie. Esattamente quello che voglio – mrutyunjay

+0

Questo funziona bene per git <1.7.10. Puoi spiegare cosa fa quella seconda parte dell'espressione sed? '-e 's/\^{} //'' – Dave

4
git for-each-ref --format='%(objectname) %(refname:short)' refs/tags/ | 
    grep ^$commit_id | 
    cut -d' ' -f2

Peccato che non può essere fatto più facilmente. Un altro flag su git tag per includere gli ID di commit potrebbe esprimere l'invocazione di git for-each-ref in modo naturale.

+1

Grazie per le informazioni, ma a quanto pare non riesco a vedere i tag con questo comando. L'uso del più semplice "git for-each-ref | grep 48eb354" fornisce 0 corrispondenze. gitk d'altra parte elenca bene i 2 tag davanti a questo commit. – Zitrax

+0

Sembra non funzionare per i tag annotati. –

1

Il seguente comando esegue il lavoro, ma analizza direttamente il contenuto della directory .git e quindi potrebbe interrompersi se il formato del repository git cambia.

grep -l -r -e '^48eb354' .git/refs/tags|sed -e 's,.*/,,' 
+0

Non li elenca neanche, l'unico posto in cui vedo sha1 se grepping l'intera cartella .git è in gitk.cache e logs/refs/remotes/origin/master. Come mai Gitk può elencarli? Ho anche notato che i tag che sto osservando sono tag annotati, questo potrebbe essere il motivo per cui le due risposte attuali non funzionano per me. – Zitrax

125

git tag --points-at HEAD

Mostra tutti i tag a livello di capi, si può anche sostituire con qualsiasi TESTA sha1 id.

+5

Disponibile dalla versione 1.7.10: https://raw.github.com/gitster/git/master/Documentation/RelNotes/1.7.10.txt –

21

È possibile utilizzare:

git tag --contains <commit> 

che mostra tutti i tag in certi commettere. Può essere usato al posto di:

git tag --points-at HEAD 

che è disponibile solo da 1.7.10.

+5

NB: 'git tag - containtain' non mostra solo i tag che puntano al commit, ma include anche quelli successivi tag da cui è raggiungibile. – staafl

+0

Almeno nella versione 2.6.4, questo restituisce solo un singolo tag che punta al commit specificato. Non li restituisce tutti. La risposta sopra di @max sembra funzionare correttamente per più tag. –

Problemi correlati