How to get tags on current commit

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.

  • git pull *after* git rebase?
  • can we add merge --no ff in .gitattributes file without modifying gitconfigs
  • Revert to original version of a file in git (before even adding)
  • Deleted a file by mistake, how to get from origin master?
  • Git, sub-repos & external libs for web development - best strategy once and for all?
  • EGit, selecting correct parameters for URI, Host, and Repository Path.
  • 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?

  • Change the location of ~ directory in a Windows install of GIT bash
  • Git-SVN clear auth-cache
  • Incorporating Bootstrap into a git repo, using subtree merging
  • Fatal: git was built without support for git-add--interactive (NO_PERL=1)
  • Git tag release version?
  • Correct parallelisation of git filter-branch
  • 6 Solutions collect form web for “How to get tags on current commit”

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

    git tag -l --points-at HEAD
    

    It does not have the effect to also list the tags put on forward commits as Jonathan Hartley stated in his comment of the git-tag –contains.

    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)
    

    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…

    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.

    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
    

    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
    
    Git Baby is a git and github fan, let's start git clone.