Reputation: 20255
I have seen the commands git describe
and git-name-rev
but I have not managed to get them to list more than one tag.
Example: I have the sha1 48eb354 and I know the tags A and B point to it. So I want a git command git {something} 48eb354
that produce output similar to "A, B". I am not interested in knowing references relative other tags or branches just exact matches for tags.
Upvotes: 112
Views: 52505
Reputation: 117959
(Edit: This answer was written long before git tag
had the --points-at
switch – which is what you would use nowadays.)
git for-each-ref --format='%(objectname) %(refname:short)' refs/tags/ |
grep ^$commit_id |
cut -d' ' -f2
Pity it can’t be done more easily. Another flag on git tag
to include commit IDs could express that git for-each-ref
invocation naturally.
Upvotes: 6
Reputation: 139
For current commit you can use
git tag --points-at $(git log -n1 --pretty='%H')
Upvotes: 3
Reputation: 6458
You can use:
git tag --contains <commit>
that shows all tags at certain commit. It can be used instead of:
git tag --points-at HEAD
that is available only from 1.7.10.
Upvotes: 65
Reputation: 2551
git tag --points-at HEAD
Shows all tags at HEAD, you can also substitute HEAD with any sha1 id.
Upvotes: 255
Reputation: 34407
git show-ref --tags -d | grep ^48eb354 | sed -e 's,.* refs/tags/,,' -e 's/\^{}//'
should work for both lightweight and annotated tags.
Upvotes: 52
Reputation: 44503
The following command does the job, but directly parse the content of the .git directory and thus may break if the git repository format change.
grep -l -r -e '^48eb354' .git/refs/tags|sed -e 's,.*/,,'
Upvotes: 1