547 Stimmen

Wie kann man feststellen, auf welchen Commit ein Tag in Git verweist?

Ich habe einen Haufen unkommentierter Tags im Repository und möchte herausfinden, auf welchen Commit sie verweisen. Gibt es einen Befehl, der einfach die Tags und ihre Commit-SHAs auflistet? Das Auschecken der Tags und das Betrachten des HEADs erscheint mir etwas zu mühsam.

Update

Nachdem ich die Antworten durchgesehen hatte, wurde mir klar, dass ich eigentlich nur die Vorgeschichte der Markierung betrachten wollte, für die git log <tagname> ist ausreichend.

Die Antwort, die als Antwort markiert ist, ist nützlich, um eine Liste von Tags und deren Übertragungen zu erhalten, was meine Frage war. Mit ein bisschen Shell-Hackery bin ich sicher, dass es möglich ist, diese in SHA+Commit Nachricht umzuwandeln.

498voto

mipadi Punkte 377834

Eine Möglichkeit, dies zu tun, wäre mit git rev-list . Im Folgenden wird die Übergabe, auf die eine Markierung verweist, ausgegeben:

$ git rev-list -n 1 $TAG

HINWEIS Dies funktioniert sowohl für kommentierte als auch für unkommentierte Tags

Sie können ihn als Alias in ~/.gitconfig wenn Sie es häufig benutzen:

[alias]
  tagcommit = rev-list -n 1

Und dann rufen Sie es mit:

$ git tagcommit $TAG

Möglicher Fallstrick: Wenn Sie ein lokales Checkout oder eine Verzweigung mit demselben Tag-Namen haben, könnte diese Lösung dazu führen, dass Sie " Warnung: Referenzname 'myTag' ist zweideutig ". Versuchen Sie in diesem Fall, die Spezifität zu erhöhen, z. B.:

$ git rev-list -n 1 tags/$TAG

284voto

CB Bailey Punkte 693084

WARNUNG Dies funktioniert nur bei unkommentierten Tags Daher ist es sicherer, die akzeptierte Antwort zu verwenden, die für den allgemeinen Fall gilt https://stackoverflow.com/a/1862542/1586965

git show-ref --tags

Zum Beispiel, git show-ref --abbrev=7 --tags wird Ihnen etwa folgendes angezeigt:

f727215 refs/tags/v2.16.0
56072ac refs/tags/v2.17.0
b670805 refs/tags/v2.17.1
250ed01 refs/tags/v2.17.2

130voto

Hlung Punkte 13102

Verwenden Sie einfach git show <tag>

Es werden jedoch auch Commit-Diffs ausgegeben. Um diese Diffs auszulassen, verwenden Sie git log -1 <tag> . (Dank an @DolphinDream und @demisx!)

57voto

から Igor Zevaka :

Zusammenfassung

Da es etwa 4 fast gleich akzeptable, aber unterschiedliche Antworten gibt, werde ich alle verschiedenen Möglichkeiten, einen Tag zu häuten, zusammenfassen.

  1. git rev-list -1 $TAG ( respuesta ). git rev-list gibt die Commits aus, die zu der $TAG ähnlich wie git log aber nur den SHA1 der Übergabe anzeigt. Die -1 schränkt die Ausgabe auf den Commit ein, auf den sie zeigt.

  2. git show-ref --tags ( respuesta ) zeigt alle Tags (lokale und aus der Ferne geholte) und ihre SHA1-Werte an.

  3. git show-ref $TAG ( respuesta ) zeigt den Tag und seinen Pfad zusammen mit dem SHA1 an.

  4. git rev-parse $TAG ( respuesta ) zeigt den SHA1-Wert eines unkommentierten Tags an.

  5. git rev-parse --verify $TAG^{commit} ( respuesta ) zeigt einen SHA1 von sowohl kommentierten als auch unkommentierten Tags. Unter Windows verwenden Sie git rev-parse --verify %TAG%^^^^{commit} (vier Hüte).

  6. cat .git/refs/tags/* o cat .git/packed-refs ( respuesta ), je nachdem, ob es sich um ein lokales oder ein aus der Ferne geholtes Tag handelt.

47voto

orip Punkte 69138

Für kommentierte Tags, git show-ref TAG zeigt den Hash des Tags an, nicht den Hash der Übertragung, auf die es verweist.

git show-ref --dereference TAG zeigt zusätzlich das Commit, auf das gezeigt wird, mit einem zusätzlichen ^{} .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X