gitで特定のコミットを指すすべてのタグを一覧表示する方法


85

コマンドgit describeを見たことがありますgit-name-revが、複数のタグをリストするようにできませんでした。

例:sha1 48eb354があり、タグAとBがそれを指していることを知っています。したがってgit {something} 48eb354、「A、B」と同様の出力を生成するgitコマンドが必要です。他のタグやブランチに関連する参照を知りたいのではなく、タグと完全に一致します。

回答:


46

git show-ref --tags -d | grep ^48eb354 | sed -e 's,.* refs/tags/,,' -e 's/\^{}//'

軽量タグと注釈付きタグの両方で機能するはずです。


ありがとう。まさに私が欲しいもの。
mrutyunjay 2013

これは、git <1.7.10でうまく機能します。sed式の2番目の部分が何をするのか説明できますか?-e 's/\^{}//'
デイブ

ああ、気にしないで、それを理解しました。の-dオプション用git show-refです。ドキュメントから、「-d、-dereferenceタグをオブジェクトIDに逆参照します。「^ {}」が追加されて表示されます。」
デイブ

1
${ref}注釈付きタグを含む、任意のタグを使用するためのわずかな拡張/一般化:hash=$(git rev-parse "${ref}^0"); git show-ref --tags -d | sed -n -e 's,^'"${hash}"' refs/tags/\(.*\)^{}$',\1,p'
Christian


50

次を使用できます。

git tag --contains <commit>

特定のコミットですべてのタグが表示されます。次の代わりに使用できます。

git tag --points-at HEAD

それは1.7.10からのみ利用可能です。


10
注意:「gittag --contains」は、コミットを指すタグだけでなく、到達可能な後のタグも表示します。
staafl 2016年

少なくともバージョン2.6.4では、これは指定されたコミットを指す単一のタグのみを返します。それらすべてを返すわけではありません。上記の@maxによる回答は、複数のタグに対して適切に機能しているようです。
Dejay Clayton 2016

--containsまた、はるかに遅いよりも表示されます--points-at(<1秒対7-8s実行時間)
SSilk

4
git for-each-ref --format='%(objectname) %(refname:short)' refs/tags/ |
  grep ^$commit_id |
    cut -d' ' -f2

残念ながら、これ以上簡単に行うことはできません。git tagコミットIDを含めるための別のフラグは、そのgit for-each-ref呼び出しを自然に表現できます。


1
情報をありがとうございますが、このコマンドを使用してもタグを表示できないようです。より単純な「gitfor-each-ref | grep 48eb354」を使用すると、一致が0になります。一方、gitkは、このコミットの前にある2つのタグを適切にリストします。
Zitrax 2010

1

次のコマンドはジョブを実行しますが、.gitディレクトリのコンテンツを直接解析するため、gitリポジトリの形式が変更されると破損する可能性があります。

grep -l -r -e '^48eb354' .git/refs/tags|sed -e 's,.*/,,'

それらもリストされていません。.gitフォルダー全体をgrepする場合にsha1が表示されるのは、gitk.cacheとlogs / refs / remotes / origin / masterだけです。なぜgitkはそれらをリストできるのですか?また、私が見ているタグが注釈付きタグであることに気付きました。これが、現在の2つの回答が機能しない理由である可能性があります。
Zitrax 2010

1

現在のコミットでは、次を使用できます

git tag --points-at $(git log -n1 --pretty='%H')
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.