Wie liste ich alle Tags auf, die ein Commit enthalten?

227

Diese Frage ähnelt dem Auflisten aller Tags, die auf ein bestimmtes Commit in git verweisen , jedoch mit einem Unterschied: Ich möchte nach allen Tags suchen, die ein bestimmtes Commit im Baum jedes Tags enthalten, nicht speziell nach den im Tag markierten Dateien selbst (in diesem Fall wurde nur die Makefile-Änderung markiert).

atx
quelle
1
Sie können eine bestimmte Datei nicht mit Tags versehen. Tags verweisen nur auf Commits. Möglicherweise möchten Sie Ihre Frage mit weiteren Details zu dem Problem bearbeiten, das Sie wirklich lösen möchten.
Mark Longair
Hinweis: auf Windows, stellen Sie sicher , verwenden git 2.0.x (2014) , wenn Sie wollen , git tag --containsum nicht zum Absturz bringen. Siehe meine Antwort unten
VonC

Antworten:

348
git tag --contains <commit>
Amalloy
quelle
2
Ich habe es versucht. Aber wenn das Tag nur eine Datei enthält, durchsucht es meiner Meinung nach nur diese Datei. Der Baum wird nicht durchsucht. Außerdem ist das Repository, in dem ich es anprobiert habe, so groß, dass es auf Kaution ist und SIGKILL'ed wurde.
atx
21
Tags enthalten keine Dateien. Sie sind nur Marker für ein Commit. Angesichts dessen halte ich Ihren Einwand nicht für sinnvoll.
Amalloy
Es darf mir das Commit nicht zeigen, weil in diesem Fall kein Speicher vorhanden ist. Weißt du, wie ich darüber hinwegkommen kann?
atx
5
Gibt es eine Möglichkeit, dies gegen Remote-Tags zu tun? Ähnlich wie bei Zweigen:git branch -r --contains <commit>
Mike
23

Beachten Sie, dass Sie git 2.0.x (Q3 2014) benötigen, um alle Tags für ein bestimmtes Commit aufzulisten , wenn Sie ein großes Repo haben

Siehe Commit cbc60b6 von Jean-Jacques Lafay ( lanfeust69) :

git tag --contains: Stapelüberlauf vermeiden

In großen Repos kann die Rekursionsimplementierung von contains(commit, commit_list)zu einem Stapelüberlauf führen. Ersetzen Sie die Rekursion durch eine Schleife, um sie zu beheben.

Dieses Problem tritt unter Windows offensichtlicher auf als unter Linux, wo der Stapel standardmäßig eingeschränkter ist.

Siehe auch diesen Thread in der msysGit-Liste .

VonC
quelle
9
Kein Wortspiel beabsichtigt? ;-)
MikeSchinkel
3
@ MikeSchinkel Nun ... zumindest nicht absichtlich .
VonC
16
git tag --contains <sha1_hash> 

sollte arbeiten

Manojlds
quelle