web-dev-qa-db-de.com

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

daher listet der Befehl git tag die aktuellen Git-Tags auf

tag1
tag2

git tag -n Gibt die Nachricht des Tags aus

tag1  blah blah
tag2  blah blah

Wie erhält man am besten den Hash von tag1 & tag2?

87
Quang Van

Wie wäre es damit?

git show-ref --tags
118
peterjmag

Der Befehl git tag Ist unterentwickelt. Viel ist erwünscht, fehlt aber darin, wie vollständige Tag-Details und Tags in der Commit-Verlaufsreihenfolge.

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

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

Dies gibt 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 abgekürzten Hashes und die Commit-Meldungen der Tag-Commits.


Ich habe es auf git t und git tags wie folgt:

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

Hinweis: Ich musste die Bash-Umleitung für git t Verwenden, wie Git es nicht tut ' Es wird nicht unterstützt, einen Alias ​​von einem anderen Alias ​​(der ein Mist ist) aufzurufen.


Wenn Sie das Datum und die Uhrzeit des Commits anzeigen 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 der Option --date Verwenden und die Ausgabe in der Option --pretty So steuern, dass sie Ihrem individuellen Geschmack entspricht. Beide Optionen sind in der Git-Log-Dokumentation gut dokumentiert.

38
ADTC

Mit Annotationen versehene Tags haben ein eigenes SHA-1, daher müssen sie dereferenziert werden. Leichte Tags können jedoch nicht dereferenziert werden, da sie bereits auf ein Commit verweisen. Um zu lösen, müssen wir beide auflisten und die Festschreibungsobjekte 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 kommentierten 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^{}
15
Steven Penny

Verwenden Sie git rev-parse, Um den SHA1 zu erhalten, auf den durch eine beliebige Art von Referenz (Zweig, Tag ...) verwiesen wird:

git rev-parse tag1^0 tag2^0

Es werden nur die vollständigen SHA1 in separaten Zeilen gedruckt. Das Suffix ^0 Ist eine spezielle Syntax, mit der sichergestellt wird, dass das SHA1 des Commits gedruckt wird, auf das das Tag verweist, unabhängig davon, ob es mit Anmerkungen versehen ist oder nicht. (Mit Anmerkungen versehene Tags sind eigenständige Objekte, die einen Zeiger auf ein Commit sowie Metadaten enthalten. Wenn Sie wissen, dass ein Tag mit Anmerkungen versehen ist und das SHA1 des Tags verwenden möchten, lassen Sie einfach ^0 Weg.)

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

9
Cascabel

Ich hatte eine ähnliche Frage, wollte aber den Hash von (mehreren) spezifischen Tags. Ich habe festgestellt, dass "show-ref" eine Liste von Tags annimmt, also erledigt dies den Job:

% 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 folgendem 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 nette Zusammenfassung in Wie erkennt man, auf welches Commit ein Tag in Git verweist? .

8
Ted

Die Tags müssen signiert und/oder mit Nachrichten versehen sein. Lightweight-Tags haben keine SHA1-Objekte und sind nur Refs. Ansonsten versuche git show.

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

Dies gibt eine Liste aller Commits für Tags. Kommentierte Tags werden dereferenziert. Sende Danke hier .

2

Ich nahm den Befehl von anatoly techtonik post fügte die Überschrift der Tags/Commits hinzu und formatierte sie als Nice cols.

Das Ergebnis ist eine Ausgabe, die mit git tag -n Identisch ist, jedoch einen Festschreibungs-Hash als Präfix enthält.

git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname:short)%(else)%(objectname:short)%(end)|%(refname:short)|%(contents:subject)' refs/tags | column -t -s '|'

Wenn Sie den Long-Hash anstelle des Short-Hash haben möchten, ersetzen Sie einfach objectname:short Durch objectname.

0
Radon8472