How to get tags on current commit

Git

Git Problem Overview


I have a repository which has multiple tags on the same commit. For example:

commit #3 <--- TAG1 / TAG2 / TAG3

  |

commit #2 <--- TAG4/ TAG5

  |

commit #1 <--- TAG6/ TAG7

I'd like to find out what tags are on a particular commit. For example, if I check commit 1, I'd like to get tag 6 and tag 7.

I have tried:

git checkout <commit 1> 
git tag --contains

which displayed tags 1-7.

git checkout <commit 1>
git describe --tags HEAD

displayed tag 6 only.

What is the proper way to do this in Git?

Git Solutions


Solution 1 - Git

For completion (thanks to Ciro Santili answer), git tag has got the option --points-at that does exactly what OP is asking.

git tag --points-at HEAD

It does not have the effect of also listing the tags put on forward commits (as Jonathan Hartley stated in his comment regarding git tag --contains).

Solution 2 - Git

I guess maybe git has had some options added since this question was asked, but since it still comes in pretty high on google, I thought I'd add that this way works nicely:

git tag -l --contains HEAD

Or replace HEAD with any other valid commit reference you like.

This will print a newline separated list of tags if the HEAD contains any tags, and print nothing otherwise, so you would get:

TAG6
TAG7

And of course there are lots of nice ways with various other shell tools that you can format that output once you have it...

Solution 3 - Git

Some improvements on William's answer:

git config --global alias.tags 'log -n1 --pretty=format:%h%d'

The output looks like this:

~$ git tags
7e5eb8f (HEAD, origin/next, origin/master, origin/HEAD, master)
~$ git tags HEAD~6
e923eae (tag: v1.7.0)

Solution 4 - Git

git tag --points-at

> --points-at > Only list tags of the given object (HEAD if not specified). Implies --list.

from https://git-scm.com/docs/git-tag

Solution 5 - Git

This is not ideal, but perhaps helpful:

$ git log -n 1 --decorate --pretty=oneline
You could play around with the format to get exactly what you want.

Solution 6 - Git

This displays the commit id of HEAD, as well as any branches or any tags that also happen to be exactly at HEAD.

git reflog --decorate -1

Sample output:

484c27b (HEAD, tag: deployment-2014-07-30-2359, master, origin/master) HEAD@{0}: 484c27b878ca5ab45185267f4a6b56f8f8d39892: updating HEAD

Solution 7 - Git

Here's a refinement of @JoshLee's answer, which manipulates the output to list only tags (not branches, nor HEAD) and strips the word 'tag:' and decorative punctuation. This is useful if you are scripting something up which needs to find the current tags (e.g. put them in your prompt):

git log -n1 --pretty="format:%d" | sed "s/, /\n/g" | grep tag: | sed "s/tag: \|)//g"

Example output:

$ git log -n 1 --decorate=short
commit a9313...c7f2 (HEAD, tag: v1.0.1, tag: uat, mybranch)
...
$ git log -n1 --pretty="format:%d" | sed "s/, /\n/g" | grep tag: | sed "s/tag: \|)//g"
v1.0.1
uat

Solution 8 - Git

I'm doing git tag -l | grep $(git describe HEAD) it returns the tag of the latest commit, or nothing if the last commit isn't tagged

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionShawnView Question on Stackoverflow
Solution 1 - GitFrederic MariaView Answer on Stackoverflow
Solution 2 - GitarcticmacView Answer on Stackoverflow
Solution 3 - GitJosh LeeView Answer on Stackoverflow
Solution 4 - GitqoomonView Answer on Stackoverflow
Solution 5 - GitWilliam PursellView Answer on Stackoverflow
Solution 6 - GitwebmatView Answer on Stackoverflow
Solution 7 - GitJonathan HartleyView Answer on Stackoverflow
Solution 8 - GitFrançoisView Answer on Stackoverflow