コマンドgit describe
を見たことがありますgit-name-rev
が、複数のタグをリストするようにできませんでした。
例:sha1 48eb354があり、タグAとBがそれを指していることを知っています。したがってgit {something} 48eb354
、「A、B」と同様の出力を生成するgitコマンドが必要です。他のタグやブランチに関連する参照を知りたいのではなく、タグと完全に一致します。
回答:
git show-ref --tags -d | grep ^48eb354 | sed -e 's,.* refs/tags/,,' -e 's/\^{}//'
軽量タグと注釈付きタグの両方で機能するはずです。
-e 's/\^{}//'
-d
オプション用git show-ref
です。ドキュメントから、「-d、-dereferenceタグをオブジェクトIDに逆参照します。「^ {}」が追加されて表示されます。」
${ref}
注釈付きタグを含む、任意のタグを使用するためのわずかな拡張/一般化:hash=$(git rev-parse "${ref}^0"); git show-ref --tags -d | sed -n -e 's,^'"${hash}"' refs/tags/\(.*\)^{}$',\1,p'
git tag --points-at HEAD
HEADのすべてのタグを表示します。また、HEADを任意のsha1IDに置き換えることもできます。
次を使用できます。
git tag --contains <commit>
特定のコミットですべてのタグが表示されます。次の代わりに使用できます。
git tag --points-at HEAD
それは1.7.10からのみ利用可能です。
--contains
また、はるかに遅いよりも表示されます--points-at
(<1秒対7-8s実行時間)
git for-each-ref --format='%(objectname) %(refname:short)' refs/tags/ |
grep ^$commit_id |
cut -d' ' -f2
残念ながら、これ以上簡単に行うことはできません。git tag
コミットIDを含めるための別のフラグは、そのgit for-each-ref
呼び出しを自然に表現できます。
次のコマンドはジョブを実行しますが、.gitディレクトリのコンテンツを直接解析するため、gitリポジトリの形式が変更されると破損する可能性があります。
grep -l -r -e '^48eb354' .git/refs/tags|sed -e 's,.*/,,'