Keine Frage, die ich separat stellen möchte, aber ich frage mich, warum git tag( -noder eine andere Option ...) überhaupt keine Commit-Hashes angezeigt werden. Es ist schön zu sehen, welche Lösungen die Leute finden, aber ich halte dies für einen Konstruktionsfehler bei den verfügbaren Optionen.
andreee
Antworten:
142
Um Git-Tags mit dem SHA1-Hash des Tag-Objekts abzurufen, können Sie Folgendes ausführen:
Beachten Sie, dass hierdurch nicht zwischen leichten und mit Anmerkungen versehenen Tags unterschieden wird. Bei Lightweight-Tags wird das Commit und bei kommentierten Tags der Hash des Tag-Objekts selbst angezeigt.
Lily Ballard
20
Um eine Liste von Tags mit dereferenzierten Verweisen anzuzeigen (bei kommentierten Tags), verwenden Sie git show-ref --tags -d. Dereferenzierte Tags werden mit a nachfixiert ^{}.
S. Christoffer Eliesen
49
Der git tagBefehl ist unterentwickelt. Es ist viel erwünscht, aber es fehlt darin, wie vollständige Tag-Details und Tags in der Reihenfolge des Commit-Verlaufs.
Ich mag das stattdessen, was genau das gibt, was ich will, aber nicht bekommen kann von git tag:
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-Nachrichten der Tag-Commits.
Ich habe es auf git tund git tagswie folgt ausgerichtet:
Hinweis: Ich musste die Bash-Umleitung verwenden, git tda Git das Aufrufen eines Alias von einem anderen Alias nicht unterstützt (was ein Mist ist).
Wenn Sie das Datum und die Uhrzeit des Commits anzeigen möchten, versuchen Sie Folgendes:
Sie können andere Datumsformate in der --dateOption verwenden sowie die Ausgabe vollständig steuern, um Ihrem individuellen Geschmack in der --prettyOption zu entsprechen. Beide Optionen sind in der Git-Log-Dokumentation gut dokumentiert .
Obwohl dies nicht das ist, was das OP verlangt hat (Commit- Sha1-Hashes anzeigen ), ist es sehr nützlich, da die Commit-Nachrichten auch nützlich sein können. +1 von mir.
Stelios Adamantidis
2
@nealmcb git logist mächtig! Sie können genau das anzeigen lassen, was Sie möchten. Versuchen Sie es git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'. Andere Datumsformate sind ebenfalls möglich. Schauen Sie einfach auf --dateder Hilfeseite nach. Ich habe meine Antwort aktualisiert, um diese Option einzuschließen.
ADTC
1
@SteliosAdamantidis Eigentlich gibt meine Antwort die abgekürzten SHA1-Hashes (die ersten 7 Zeichen) an, und wenn Sie Hashes in voller Länge möchten, können Sie sie jederzeit mit --prettyund ändern %H. Vielen Dank für die +1 :)
ADTC
15
Kommentierte Tags haben ihre eigene SHA-1, daher müssen wir sie dereferenzieren. Lightweight-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 Commit-Objekte filtern:
Bei Verwendung git log --tags --oneline --no-walkwerden auch kommentierte Tags automatisch berücksichtigt. :)
ADTC
11
Um den SHA1 zu erhalten, auf den sich eine beliebige Art von Referenz (Zweig, Tag ...) bezieht, verwenden Sie git rev-parse:
git rev-parse tag1^0 tag2^0
Es werden nur die vollständigen SHA1s in separaten Zeilen gedruckt. Das ^0Suffix ist eine spezielle Syntax, um sicherzustellen, dass der SHA1 des Commits gedruckt wird, auf das das Tag zeigt, unabhängig davon, ob es mit Anmerkungen versehen ist oder nicht. (Mit Anmerkungen versehene Tags sind eigenständige Objekte, die zusammen mit Metadaten einen Zeiger auf ein Commit enthalten. Wenn Sie wissen, dass ein Tag mit Anmerkungen versehen ist und die SHA1 des Tags möchten, lassen Sie einfach das ^0.)
Natürlich sollten Sie dies nicht oft tun müssen, da jeder Git-Befehl, der einen SHA1 akzeptiert, auch ein Tag akzeptieren sollte!
Beste Antwort hier, danke @Jefromi. Beachten Sie, dass in einer Windows-Cmd-Shell jeder git-Befehl mit ^ in Anführungszeichen gesetzt werden muss: z. B. git rev-parse "tag1 ^ 0" "tag2 ^ 0".
Jojo
8
Ich hatte eine ähnliche Frage, wollte aber den Hash von (mehreren) spezifischen Tags. Ich habe festgestellt, dass "show-ref" eine Liste von Tags enthält, also erledigt dies den Job:
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.
Die Tags müssen signiert und / oder mit Nachrichten versehen sein. Leichte Tags haben keine SHA1-Objekte und sind nur Refs. Andernfalls versuchen Sie es git show.
Tolle Lösung. Wenn Sie nur Seitennamen anstelle des vollständigen Referenznamens haben möchten, können Sie die Verwendung %(refname:short)anstelle von ändern %(refname).
Radon8472
2
Ich nahm den Befehl von anatoly techtonik post und fügte die Überschriftenmeldung der Tags / Commits hinzu und formulierte sie als nette Spalten.
Das Ergebnis ist eine Ausgabe, git tag -ndie mit dem Commit-Hash als Präfix identisch ist.
git tag
(-n
oder eine andere Option ...) überhaupt keine Commit-Hashes angezeigt werden. Es ist schön zu sehen, welche Lösungen die Leute finden, aber ich halte dies für einen Konstruktionsfehler bei den verfügbaren Optionen.Antworten:
Um Git-Tags mit dem SHA1-Hash des Tag-Objekts abzurufen, können Sie Folgendes ausführen:
Die Ausgabe sieht dann ungefähr so aus:
Jede Zeile ist der SHA1-Hash des Tags, gefolgt vom Tag-Namen mit dem Präfix
refs/tags/
.Wenn Sie den SHA1-Hash des Commits anstelle des Tag-Objekts verwenden möchten, können Sie Folgendes ausführen:
Dies erzeugt eine Ausgabe wie:
Die Zeilen, die mit
^{}
beginnen, beginnen mit dem SHA1-Hash des tatsächlichen Commits, auf das das Tag zeigt.quelle
git show-ref --tags -d
. Dereferenzierte Tags werden mit a nachfixiert^{}
.Der
git tag
Befehl ist unterentwickelt. Es ist viel erwünscht, aber es fehlt darin, wie vollständige Tag-Details und Tags in der Reihenfolge des Commit-Verlaufs.Ich mag das stattdessen, was genau das gibt, was ich will, aber nicht bekommen kann von
git tag
: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-Nachrichten der Tag-Commits.
Ich habe es auf
git t
undgit tags
wie folgt ausgerichtet:Hinweis: Ich musste die Bash-Umleitung verwenden,
git t
da Git das Aufrufen eines Alias von einem anderen Alias nicht unterstützt (was ein Mist ist).Wenn Sie das Datum und die Uhrzeit des Commits anzeigen möchten, versuchen Sie Folgendes:
Sie können andere Datumsformate in der
--date
Option verwenden sowie die Ausgabe vollständig steuern, um Ihrem individuellen Geschmack in der--pretty
Option zu entsprechen. Beide Optionen sind in der Git-Log-Dokumentation gut dokumentiert .quelle
git log
ist mächtig! Sie können genau das anzeigen lassen, was Sie möchten. Versuchen Sie esgit log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'
. Andere Datumsformate sind ebenfalls möglich. Schauen Sie einfach auf--date
der Hilfeseite nach. Ich habe meine Antwort aktualisiert, um diese Option einzuschließen.--pretty
und ändern%H
. Vielen Dank für die +1 :)Kommentierte Tags haben ihre eigene SHA-1, daher müssen wir sie dereferenzieren. Lightweight-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 Commit-Objekte filtern:
Ergebnis mit leichten Tags:
Ergebnis mit kommentierten Tags:
quelle
git log --tags --oneline --no-walk
werden auch kommentierte Tags automatisch berücksichtigt. :)Um den SHA1 zu erhalten, auf den sich eine beliebige Art von Referenz (Zweig, Tag ...) bezieht, verwenden Sie
git rev-parse
:Es werden nur die vollständigen SHA1s in separaten Zeilen gedruckt. Das
^0
Suffix ist eine spezielle Syntax, um sicherzustellen, dass der SHA1 des Commits gedruckt wird, auf das das Tag zeigt, unabhängig davon, ob es mit Anmerkungen versehen ist oder nicht. (Mit Anmerkungen versehene Tags sind eigenständige Objekte, die zusammen mit Metadaten einen Zeiger auf ein Commit enthalten. Wenn Sie wissen, dass ein Tag mit Anmerkungen versehen ist und die SHA1 des Tags möchten, lassen Sie einfach das^0
.)Natürlich sollten Sie dies nicht oft tun müssen, da jeder Git-Befehl, der einen SHA1 akzeptiert, auch ein Tag akzeptieren sollte!
quelle
Ich hatte eine ähnliche Frage, wollte aber den Hash von (mehreren) spezifischen Tags. Ich habe festgestellt, dass "show-ref" eine Liste von Tags enthält, also erledigt dies den Job:
Einige Experimente mit "git show" führten jedoch zu folgendem Befehl:
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 erkennt man, auf welches Commit ein Tag in Git verweist? .
quelle
Die Tags müssen signiert und / oder mit Nachrichten versehen sein. Leichte Tags haben keine SHA1-Objekte und sind nur Refs. Andernfalls versuchen Sie es
git show
.quelle
Dies gibt eine Liste aller Commits für Tags. Kommentierte Tags werden dereferenziert. Senden Sie hier Danke .
quelle
%(refname:short)
anstelle von ändern%(refname)
.Ich nahm den Befehl von anatoly techtonik post und fügte die Überschriftenmeldung der Tags / Commits hinzu und formulierte sie als nette Spalten.
Das Ergebnis ist eine Ausgabe,
git tag -n
die mit dem Commit-Hash als Präfix identisch ist.Wenn Sie den Long-Hash anstelle des Short-Hash haben möchten, ersetzen Sie ihn einfach
objectname:short
durchobjectname
.quelle