Git-Tag-Liste, zeigt Commit-Sha1-Hashes an

Lesezeit: 7 Minuten

Git Tag Liste zeigt Commit Sha1 Hashes an
Quang Van

also die git tag Der Befehl listet die aktuellen Git-Tags auf

tag1
tag2

git tag -n druckt die Nachricht des Tags

tag1  blah blah
tag2  blah blah

Was ist der beste Weg, um den Hash von tag1 & tag2 zu bekommen?

  • Keine Frage, die ich separat stellen würde, aber ich frage mich, warum git tag (-n oder eine andere Option …) zeigt von vornherein keine Commit-Hashes an. Es ist schön zu sehen, welche Lösungen die Leute finden, aber ich halte dies für einen Designfehler in den verfügbaren Optionen.

    – andree

    23. August 18 um 7:18 Uhr

Git Tag Liste zeigt Commit Sha1 Hashes an
peterjmag

Um Git-Tags mit dem SHA1-Hash des Tag-Objekts zu erhalten, können Sie Folgendes ausführen:

git show-ref --tags

Die Ausgabe sieht dann etwa so aus:

0e76920bea4381cfc676825f3143fdd5fcf8c21f refs/tags/1.0.0
5ce9639ead3a54bd1cc062963804e5bcfcfe1e83 refs/tags/1.1.0
591eceaf92f99f69ea402c4ca639605e60963ee6 refs/tags/1.2.0
40414f41d0fb89f7a0d2f17736a906943c05acc9 refs/tags/1.3.0

Jede Zeile ist der SHA1-Hash des Tags, gefolgt vom Tag-Namen mit dem Präfix refs/tags/.

Wenn Sie den SHA1-Hash des Commit anstelle des Tag-Objekts möchten, können Sie Folgendes ausführen:

git show-ref --tags -d

Dies erzeugt eine Ausgabe wie:

0e76920bea4381cfc676825f3143fdd5fcf8c21f refs/tags/1.0.0
3e233dd8080617685992dc6346f739a6f6396aae refs/tags/1.0.0^{}
5ce9639ead3a54bd1cc062963804e5bcfcfe1e83 refs/tags/1.1.0
09173980152a7ed63d455829553448ece76c6fdc refs/tags/1.1.0^{}
591eceaf92f99f69ea402c4ca639605e60963ee6 refs/tags/1.2.0
56d803caaa8a93a040b7be0b8a36abdc4ce8c509 refs/tags/1.2.0^{}
40414f41d0fb89f7a0d2f17736a906943c05acc9 refs/tags/1.3.0
1bdf628a70fda7a0d840c52f3abce54b1c6b0130 refs/tags/1.3.0^{}

Die Zeilen, die mit enden ^{} Beginnen Sie mit dem SHA1-Hash des tatsächlichen Commits, auf den das Tag zeigt.

  • Beachten Sie, dass dabei nicht zwischen Lightweight-Tags und annotierten Tags unterschieden wird. Bei Lightweight-Tags wird der Commit angezeigt und bei annotierten Tags wird der Hash des Tag-Objekts selbst angezeigt.

    – Lily Ballard

    9. Januar 12 um 23:43 Uhr

  • Um eine Liste von Tags mit dereferenzierten Refs anzuzeigen (im Falle von annotierten Tags), verwenden Sie git show-ref --tags -d. Dereferenzierte Tags werden mit einem Postfix versehen ^{}.

    – S.Christoffer Eliesen

    10. November 12 um 19:30 Uhr

1643039286 972 Git Tag Liste zeigt Commit Sha1 Hashes an
ADTC

Der git tag Befehl ist unterentwickelt. Vieles ist erwünscht, aber es fehlt darin, wie vollständige Tag-Details und Tags in der Reihenfolge des Commit-Verlaufs.

Ich mag stattdessen das, was genau das gibt, was ich will, aber nicht bekommen kann git tag:

git log --oneline --decorate --tags --no-walk

Dies ergibt eine sehr schöne farbcodierte Ansicht der Tags in umgekehrter chronologischer Reihenfolge (wie im vollständigen Protokoll). Auf diese Weise sehen Sie nicht nur die Tags, sondern auch die verkürzten Hashes und die Commit-Nachrichten der Tag-Commits.


Ich habe es mit einem Alias ​​versehen git t und git tags folgendermaßen:

git config --global alias.tags "log --oneline --decorate --tags --no-walk"
git config --global alias.t "!git tags"

Notiz: Ich musste die Bash-Umleitung für verwenden git t da Git das Aufrufen eines Alias ​​von einem anderen Alias ​​nicht unterstützt (was schade ist).


Wenn Sie das Commit-Datum und die Uhrzeit sehen möchten, versuchen Sie Folgendes:

git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'

Sie können andere Datumsformate in verwenden --date Option sowie die vollständige Steuerung der Ausgabe, um sie Ihrem einzigartigen Geschmack anzupassen --pretty Möglichkeit. Beide Optionen sind in der gut dokumentiert git-log-Dokumentation.

  • Obwohl nicht das, was das OP gefragt hat (Commit anzeigen sha1-Hashes) ist sehr nützlich, da die Commit-Meldungen ebenfalls nützlich sein könnten. +1 von mir.

    – Stelios Adamantidis

    14. April 17 um 13:28 Uhr

  • @nealmcb git log ist mächtig! Du kannst es zeigen exakt was du willst. Versuchen git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'. Andere Datumsformate sind ebenfalls möglich. Schau einfach nach oben --date auf der Hilfeseite. Ich habe meine Antwort aktualisiert, um diese Option aufzunehmen.

    – ADTC

    12. November 17 um 20:54 Uhr


  • @SteliosAdamantidis Eigentlich gibt das meine Antwort abgekürzt SHA1-Hashes (erste 7 Zeichen), und wenn Sie Hashes in voller Länge möchten, können Sie sie jederzeit mit ändern --pretty und %H. Danke für die +1 🙂

    – ADTC

    12. November 17 um 22:58 Uhr

  • Aus irgendeinem Grund, den ich nicht verstehe, ist es unter Windows (getestet mit git 2.32.0.windows.2) notwendig, eine Leerzeichenänderung hinzuzufügen %cd%d zu %cd %d. Es muss nur von einer Windows-Eingabeaufforderung ausgeführt werden – “git bash” unter Windows hat das Problem nicht. Vollständiger Befehl für die Windows-Cmd-Shell: git log --tags --no-walk --date=iso-local --pretty="%C(auto)%h %cd %d %s"

    – Nathan

    7. August 21 um 2:57 Uhr


  • @Nathan Danke fürs Teilen. Ich bin nicht darauf gestoßen, da ich normalerweise Git Bash verwende, nicht die Windows-Cmd-Shell. Es gibt viele leistungsstarke Dinge, die Sie mit Bash tun können, die Sie mit der Eingabeaufforderung einfach nicht tun können. Lernen und Umsteigen lohnt sich 🙂

    – ADTC

    8. August 21 um 20:27 Uhr

1643039287 392 Git Tag Liste zeigt Commit Sha1 Hashes an
Zombo

Annotierte Tags haben ihren eigenen SHA-1, also müssen wir sie dereferenzieren. Lightweight-Tags können jedoch nicht dereferenziert werden, da sie bereits auf einen Commit verweisen. Zur Lösung müssen wir beide auflisten und die Commit-Objekte filtern:

git for-each-ref --sort -v:refname --format '%(objectname) %(objecttype) %(refname)
%(*objectname) %(*objecttype) %(*refname)' refs/tags | grep commit

Ergebnis mit Lightweight-Tags:

589610a0114a375f1bff716dd308cf8df08571d3 commit refs/tags/1.4.9
e25952a74bf379783944bef9c4fcc60600cb764c commit refs/tags/1.4.8
19b1c2c96a9678837f57eac86cf3d22842731510 commit refs/tags/1.4.7
7208212a55c4a56af34da781a7f730d6ddd557a1 commit refs/tags/1.4.6
62ec20337a4125496bd4f56288f3283963153194 commit refs/tags/1.4.5

Ergebnis mit annotierten Tags:

e2b2d6a172b76d44cb7b1ddb12ea5bfac9613a44 commit refs/tags/v2.11.0-rc3^{}
1310affe024fba407bff55dbe65cd6d670c8a32d commit refs/tags/v2.11.0-rc2^{}
3ab228137f980ff72dbdf5064a877d07bec76df9 commit refs/tags/v2.11.0-rc1^{}
1fe8f2cf461179c41f64efbd1dc0a9fb3b7a0fb1 commit refs/tags/v2.11.0-rc0^{}
454cb6bd52a4de614a3633e4f547af03d5c3b640 commit refs/tags/v2.11.0^{}

  • Verwenden git log --tags --oneline --no-walk wird auch annotierte Tags automatisch deferieren. 🙂

    – ADTC

    12. November 17 um 21:07 Uhr

Um den SHA1 zu erhalten, auf den von einer beliebigen Art von Referenz (Zweig, Tag …) verwiesen wird, verwenden Sie git rev-parse:

git rev-parse tag1^0 tag2^0

Es werden nur die vollständigen SHA1s in separaten Zeilen gedruckt. Der ^0 suffix ist eine spezielle Syntax, um sicherzustellen, dass dies den SHA1 des Commits ausgibt, auf den das Tag zeigt, unabhängig davon, ob es kommentiert ist oder nicht. (Annotierte Tags sind eigenständige Objekte, die einen Zeiger auf einen Commit zusammen mit Metadaten enthalten. Wenn Sie wissen, dass ein Tag mit Anmerkungen versehen ist, und den SHA1 des Tags wünschen, lassen Sie einfach das weg ^0.)

Natürlich sollten Sie dies nicht oft tun müssen, da jeder Git-Befehl, der ein SHA1 akzeptieren würde, auch ein Tag akzeptieren sollte!

1643039287 327 Git Tag Liste zeigt Commit Sha1 Hashes an
Ted

Ich hatte eine ähnliche Frage, wollte aber den Hash von (mehreren) bestimmten Tags. Ich habe festgestellt, dass “show-ref” eine Liste von Tags benötigt, also erledigt dies die Aufgabe:

% git show-ref v3.4.0.13-ga v3.4.0.13-base
bfc7747c4cf67a4aacc71d7a40337d2c3f73a886 refs/tags/v3.4.0.13-base
79ba365e75a4f9cee074d25a605a26acb660b7de refs/tags/v3.4.0.13-ga

Einige Experimente mit “git show” führten jedoch zu diesem Befehl:

% git show --summary --oneline --decorate v3.4.0.13-ga v3.4.0.13-base
79ba365 (tag: v3.4.0.13-ga, rhins013a) commit message the first
bfc7747 (tag: v3.4.0.13-base) commit message the second

Da ich mit „show“ viel besser vertraut bin als mit „show-ref“, finde ich letzteres leichter zu merken und auch hilfreicher.

Siehe auch die schöne Zusammenfassung in Wie kann ich feststellen, auf welches Commit ein Tag in Git zeigt?.

1643039287 723 Git Tag Liste zeigt Commit Sha1 Hashes an
anatoly techtonik

 git for-each-ref --format="%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) %(refname)" refs/tags

Dies gibt eine Liste aller Commits für Tags. Annotierte Tags werden dereferenziert. Danke senden Hier.

1643039287 832 Git Tag Liste zeigt Commit Sha1 Hashes an
Adam Dymitruk

Die Tags müssen signiert und/oder mit einer Nachricht versehen werden. Lightweight-Tags haben keine SHA1-Objekte und sind nur Refs. Ansonsten versuchen git show.

.

620020cookie-checkGit-Tag-Liste, zeigt Commit-Sha1-Hashes an

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy