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.

  • How to specify version with git smart commits?
  • cannot checkout remote git branch
  • How to specify lib directory when installing development version R Packages from github repository
  • Convert line-endings for whole directory tree (Git)
  • How can I commit with no fast forward option (--no-ff) in SourceTree?
  • Git commit ERROR: Repository invalid
  • 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 commands execution (like “git diff” or “git help commit”) returns errors about “sensible-paper”
  • fatal: unable to access '': The requested URL returned error: 403
  • How to tell `git diff <commit>` to diff untracked files that used to be tracked in `<commit>`?
  • Git diff --name-only and copy that list
  • Git: How to know the mode of a file in a commit
  • Git: how to list all files under version control along with their author date?
  • 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:


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