Risposte:
Modifica : Jakub Narębski ha più git-fu. Il seguente comando molto più semplice funziona perfettamente:
git describe --tags
(O senza il --tags
se 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-log
riporta il registro a partire da ciò che hai estratto. %h
stampa l'hash abbreviato. Quindi git describe --exact-match --tags
trova il tag (leggero o annotato) che corrisponde esattamente a quel commit.
La $()
sintassi sopra presuppone che tu stia usando bash o simili.
--exact-match
alla 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 describe
impostazione 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)
^0
per i commit che corrispondono ai tag (ad es. Per i tag 1.0
in output 1.0^0
). Esiste un modo per avere solo l'output di Git 1.0
o 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_tag
e 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_branch
partire 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 describe
mostrerebbe 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>
.