Risposte:
Modifica : Jakub Narębski ha più git-fu. Il seguente comando molto più semplice funziona perfettamente:
git describe --tags
(O senza il --tagsse hai estratto un tag annotato. Il mio tag è leggero, quindi ho bisogno dei tag -.)
segue la risposta originale:
git describe --exact-match --tags $(git log -n1 --pretty='%h')
Qualcuno con più git-fu potrebbe avere una soluzione più elegante ...
Questo sfrutta il fatto che git-logriporta il registro a partire da ciò che hai estratto. %hstampa l'hash abbreviato. Quindi git describe --exact-match --tagstrova il tag (leggero o annotato) che corrisponde esattamente a quel commit.
La $()sintassi sopra presuppone che tu stia usando bash o simili.
--exact-matchalla mia risposta pochi secondi prima del tuo commento. Bello sapere che puoi rimuoverlo e ottenere comunque buone informazioni dall'input fuzzier.
git rev-parse HEADè una soluzione migliore di git log -n1 --pretty='%h'... ma perché non puoi semplicemente scrivere HEAD(o niente, come git describeimpostazione predefinita su HEAD)?
Questo ha funzionato per me git describe --tags --abbrev=0
Mostra tutti i tag sull'attuale HEAD (o commit)
git tag --points-at HEAD
git describeè un comando di porcellana , che dovresti evitare:
http://git-blame.blogspot.com/2013/06/checking-current-branch-programatically.html
Invece, ho usato:
git name-rev --tags --name-only $(git rev-parse HEAD)
^0per i commit che corrispondono ai tag (ad es. Per i tag 1.0in output 1.0^0). Esiste un modo per avere solo l'output di Git 1.0o dovrei usare sed per questo?
Quando controlli un tag, hai quella che viene chiamata "testa staccata" . Normalmente, il commit HEAD di Git è un puntatore al ramo che hai attualmente estratto. Tuttavia, se controlli qualcosa di diverso da un ramo locale (un tag o un ramo remoto, ad esempio) hai una "testa staccata" - non sei davvero su nessun ramo. Non dovresti fare alcun commit mentre sei su una testa staccata.
Va bene controllare un tag se non si desidera apportare modifiche. Se stai solo esaminando il contenuto dei file o vuoi costruire il tuo progetto da un tag, va bene git checkout my_tage lavora con i file, purché non ti impegni . Se si desidera iniziare a modificare i file, è necessario creare un ramo basato sul tag:
$ git checkout -b my_tag_branch my_tag
creerà un nuovo ramo chiamato a my_tag_branchpartire da my_tag. È possibile eseguire il commit delle modifiche in questo ramo.
git log --decorate
Questo ti dirà quali riferimenti indicano il commit attualmente estratto.
git describemostrerebbe il nome del tag se si è esattamente sul tag (annotato) o, in<tag>-<n>-g<shortened sha-1>caso contrario, dov'è il<n>numero di commit da allora<tag>.