Edit : Jakub Narębski hat mehr Git-Fu. Der folgende viel einfachere Befehl funktioniert perfekt:
git describe --tags
(Oder ohne das, --tags
wenn Sie ein mit Anmerkungen versehenes Tag ausgecheckt haben. Mein Tag ist leichtgewichtig, daher benötige ich die --tags.)
Die ursprüngliche Antwort folgt:
git describe --exact-match --tags $(git log -n1 --pretty='%h')
Jemand mit mehr Git-Fu hat vielleicht eine elegantere Lösung ...
Dies nutzt die Tatsache, dass git-log
das Protokoll ab dem beginnt, was Sie ausgecheckt haben. %h
druckt den abgekürzten Hash. Dann git describe --exact-match --tags
findet den Tag (leichten oder mit Anmerkungen versehen) , die genau Matches, die zu begehen.
Bei der $()
obigen Syntax wird davon ausgegangen, dass Sie Bash oder ähnliches verwenden.
git describe
würde Tag - Namen zeigen , wenn Sie genau auf sind (kommentierte) Tag oder<tag>-<n>-g<shortened sha-1>
wenn nicht, wo<n>
seit Anzahl von Commits ist<tag>
.--exact-match
habe meine Antwort Sekunden vor Ihrem Kommentar hinzugefügt . Gut zu wissen, dass Sie es entfernen und trotzdem gute Informationen von unschärferen Eingaben erhalten können.git rev-parse HEAD
ist eine bessere Lösung alsgit log -n1 --pretty='%h'
... aber warum können Sie nicht einfach schreibenHEAD
(oder nichts,git describe
standardmäßig HEAD)?Das hat bei mir funktioniert
git describe --tags --abbrev=0
quelle
Alle Tags auf dem aktuellen HEAD anzeigen (oder festschreiben)
quelle
git describe
ist ein Porzellanbefehl , den Sie vermeiden sollten:http://git-blame.blogspot.com/2013/06/checking-current-branch-programatic.html
Stattdessen habe ich verwendet:
quelle
^0
für Commits aus, die Tags entsprechen (z. B. für Tags1.0
, die ausgegeben werden1.0^0
). Gibt es eine Möglichkeit, nur Git-Ausgabe zu haben1.0
, oder sollte ich dafür sed verwenden?Wenn Sie ein Tag auschecken, haben Sie einen sogenannten "abgetrennten Kopf" . Normalerweise ist das HEAD-Commit von Git ein Zeiger auf den Zweig, den Sie gerade ausgecheckt haben. Wenn Sie jedoch etwas anderes als einen lokalen Zweig auschecken (z. B. ein Tag oder einen Remote-Zweig), haben Sie einen "abgetrennten Kopf" - Sie befinden sich nicht wirklich in einem Zweig. Sie sollten keine Commits machen, während Sie sich auf einem abgetrennten Kopf befinden.
Es ist in Ordnung, ein Tag auszuchecken, wenn Sie keine Änderungen vornehmen möchten. Wenn Sie nur den Inhalt von Dateien untersuchen oder Ihr Projekt aus einem Tag erstellen möchten, ist es in Ordnung,
git checkout my_tag
mit den Dateien zu arbeiten, solange Sie keine Commits vornehmen . Wenn Sie mit dem Ändern von Dateien beginnen möchten, sollten Sie einen Zweig basierend auf dem Tag erstellen:erstellt einen neuen Zweig namens
my_tag_branch
abmy_tag
. Es ist sicher, Änderungen in diesem Zweig zu übernehmen.quelle
git log --decorate
Hier erfahren Sie, welche Refs auf das aktuell ausgecheckte Commit verweisen.
quelle