Ich habe eine Reihe von nicht kommentierten Tags im Repository und möchte herausfinden, auf welches Commit sie verweisen. Gibt es einen Befehl, der nur die Tags und ihre Commit-SHAs auflistet? Das Auschecken des Tags und das Betrachten des KOPFES scheint mir etwas zu mühsam.
Aktualisieren
Nachdem ich die Antworten durchgesehen hatte, wurde mir klar, dass ich eigentlich nur die Geschichte vor dem Tag betrachten wollte, was git log <tagname>
ausreicht.
Die Antwort, die als Antwort markiert ist, ist nützlich, um eine Liste der Tags und ihrer Commits zu erhalten, was ich gefragt habe. Ich bin mir sicher, dass es mit ein bisschen Shell-Hackery möglich ist, diese in SHA + Commit-Nachrichten umzuwandeln.
git show-ref
sha des Tags und nicht sha der Repo-Revision angezeigt wird. $ git show-ref test 08b9c774ab20e5bdb638339cf4ea2c124b0dae54 refs / tags / test $ git checkout test HEAD ist jetzt bei c7f8831 ... $ git checkout 08b9c77 HEAD ist jetzt bei c7f8831 ...--dereference
Antworten:
Ein Weg, dies zu tun, wäre mit
git rev-list
. Im Folgenden wird das Commit ausgegeben, auf das ein Tag verweist:Sie können es als Alias hinzufügen,
~/.gitconfig
wenn Sie es häufig verwenden:Und dann nenne es mit:
quelle
git rev-parse <tag>
? Odergit rev-list -1 <tag>
?git rev-parse $TAG
Gibt den SHA1 des Tag-Objekts zurück, nicht das Commit, auf das es zeigt.git rev-list -1
funktioniert aber.git rev-parse $TAG^{commit}
odergit rev-parse $TAG^{}
dereferenzierengit rev-list $TAG --max-count=1
git tag -a
oder erstelltgit tag -s
wurdengit rev-parse <tag>
, erhalten Sie SHA-1 eines Tag-Objekts selbst, währendgit rev-list -1 <tag>
SHA-1 Commit (Revision) angezeigt wird , auf das es verweist, genau wiegit rev-parse <tag>^{commit}
. HTH.git show-ref --abbrev=7 --tags
Zeigt Ihnen beispielsweise Folgendes:quelle
.git/packed-refs
oder.git/refs/tags/*
git tag --verbose
zeigen?-d
Flag hinzufügen , um das referenzierte Commit zu erhalten (in einer zweiten Zeile).git show-ref
sich die beiden verschiedenen Arten von Tags unterschiedlich verhalten, ist nicht offensichtlich oder allgemein bekannt.Benutz einfach
git show <tag>
Es werden jedoch auch Dumps-Commit-Diffs ausgegeben. Verwenden Sie, um diese Unterschiede wegzulassen
git log -1 <tag>
. (Danke an @DolphinDream und @demisx!)quelle
git show <tag>
zeigt den Unterschied, nicht das Commit, auf das das Tag zeigt.git show
viel mehr Dinge auf den Bildschirm geworfen , die nicht vorhanden sein müssen. Es verdeckt den tatsächlichen Commit-Hash, den man sucht. Ein besserer Befehl istgit log -1 [tag-name]
odergit log -1 --pretty=oneline [tag-name]
wenn Sie Oneliner wollen.git show-ref TAG
Zeigt in meinem Repository den Hash des Tags an, nicht den Hash des Commits, auf das es verweist.git show-ref --dereference TAG
zeigt zusätzlich das Commit, auf das hingewiesen wird.quelle
Von Igor Zevaka :
Zusammenfassung
Da es ungefähr 4 fast gleich akzeptable und dennoch unterschiedliche Antworten gibt, werde ich all die verschiedenen Möglichkeiten zusammenfassen, ein Tag zu häuten.
git rev-list -1 $TAG
( Antwort ).git rev-list
gibt die Commits aus, die zu$TAG
ähnlichem führen,git log
aber nur den SHA1 des Commits anzeigen. Das-1
begrenzt die Ausgabe auf das Commit, auf das es zeigt.git show-ref --tags
( Antwort ) zeigt alle Tags (lokal und von der Fernbedienung abgerufen) und ihre SHA1s an.git show-ref $TAG
( Antwort ) zeigt das Tag und seinen Pfad zusammen mit dem SHA1 an.git rev-parse $TAG
( Antwort ) zeigt den SHA1 eines nicht kommentierten Tags an.git rev-parse --verify $TAG^{commit}
( Antwort ) zeigt eine SHA1 mit und ohne Anmerkungen. Unter Windows verwendengit rev-parse --verify %TAG%^^^^{commit}
(vier Hüte).cat .git/refs/tags/*
odercat .git/packed-refs
( Antwort ) abhängig davon, ob das Tag lokal ist oder von der Fernbedienung abgerufen wird.quelle
Verwenden
(Dies würde SHA-1 eines Commits auch für kommentierte Tags zurückgeben).
git show-ref <tag>
würde auch funktionieren, wenn<tag>
nicht kommentiert wird. Und das gibt es immergit for-each-ref
(Details siehe Dokumentation).quelle
git rev-parse <tag>~0
was auch zu funktionieren scheint und unter Windows kein spezielles Escape erfordert (bei dem vier Hüte (^) anstelle von einem erforderlich sind). Das Suffix~<number>
gibt das <number> -te übergeordnete Commit an und~0
ergibt daher das Commit selbst. Übrigens^0
ist auch eine gültige Abkürzung für das^{commit}
Revisionssuffix.Wie wäre es damit:
ODER
quelle
Um den sha / Hash des Commits zu erhalten, auf den sich ein Tag bezieht (nicht den sha des Tags):
git rev-list -1 <tag>
quelle
Ich würde auch gerne den "richtigen" Weg kennen, aber in der Zwischenzeit können Sie dies tun:
quelle
git show --oneline mytag | head -1
Obwohl dies ziemlich alt ist, dachte ich, ich würde auf eine coole Funktion hinweisen, die ich gerade gefunden habe, um Tags mit Commits aufzulisten:
Es werden die Zweige angezeigt, die bei einem Commit enden / beginnen, und die Tags für Commits.
quelle
Sie können auch ein einfacher zu interpretierendes Bild davon erhalten, wo Tags verwendet werden
und scrollen Sie dann zu dem Tag, nach dem Sie suchen
/
.Eine kompaktere Ansicht (
--pretty=oneline
) und alle Köpfe (-a
) könnten ebenfalls helfen:Sieht ein bisschen furchterregend aus, könnte aber
~/.gitconfig
bei Bedarf auch als Alias verwendet werden.quelle
Kurze Antwort nach Git-2
Ich weiß, dass diese Frage schon eine ganze Weile hier draußen ist. Und die Antwort von CB Bailey ist 100% richtig:
git show-ref --tags --abbrev
Ich mag dieses besser, da es verwendet
git tag
:Einfach. Kurz.
PS alias es wie
git taglist
mit diesem Befehl:quelle
In der Git-Mailingliste können Sie die Liste der Commit-Hashes für Tags mit automatischer Dereferenzierung für kommentierte Tags abrufen:
quelle
Hier werden die Dateinamen nicht angezeigt, aber zumindest erhalten Sie ein Gefühl für das Repository.
Jede Datei in diesem Verzeichnis enthält einen Commit-SHA, der auf einen Commit verweist.
quelle
.git/packed-refs
hat aber funktioniert.Ich würde auch gerne den richtigen Weg kennen , aber Sie können immer einen Blick darauf werfen:
oder:
quelle
git rev-list
.Dadurch erhalten Sie den aktuellen SHA1-Hash
Abkürzung Commit Hash
Commit Hash
quelle
git log <tag> -n 1 --pretty=%H
funktioniertWenn Sie die Details des Tags SOMETAG (Tagger, Datum usw.), den Hash des Commits, auf den es verweist, und einige Informationen zum Commit anzeigen möchten, aber ohne den vollständigen Unterschied, versuchen Sie es
Beispielausgabe:
quelle
Ich habe also eine Menge Release-Ordner, in denen diese Ordner aus einem der wenigen verschiedenen Repos ausgecheckt werden können und aus Dev-, Qa- oder Master-Zweigen bestehen können oder aus Produktions-Releases, die aus einem Tag ausgecheckt wurden, und dem Tag kommentiert oder nicht. Ich habe ein Skript, das auf den Zielordner schaut und eine Antwort im Formular erhält -. Das Problem ist, dass verschiedene Versionen von git für einen Tag-Checkout einen unterschiedlichen Status zurückgeben.
Also fand ich
git show-ref --tags
anfangs funktioniert, bis auf die mit Anmerkungen versehenen Tags. Durch Hinzufügen von -d wurde jedoch ein separater Eintrag zur Liste der Tags hinzugefügt, einer für das Tag und der andere für die Annotation (das Annotation-Commit wurde als ^ {} identifiziert, das ich mit sed entfernt habe).Das ist also der Kern meines Skripts für alle, die es wollen:
quelle
Kann unten verwenden, gibt es den Commit-Hash
git show -s --format=%H <tag>^{commit}
Wenn abgekürzter Commit-Hash erforderlich ist,
git show -s --format=%h <tag>^{commit}
quelle