How to get the latest tag name in current branch in Git?

前端 未结 24 2171
你的背包
你的背包 2020-11-22 17:04

What\'s the simplest way to get the most recent tag in Git?

git tag a HEAD
git tag b HEAD^^
git tag c HEAD^
git tag

output:



        
相关标签:
24条回答
  • 2020-11-22 17:16

    To get the latest tag only on the current branch/tag name that prefixes with current branch, I had to execute the following

    BRANCH=`git rev-parse --abbrev-ref HEAD` && git describe --tags --abbrev=0 $BRANCH^ | grep $BRANCH
    

    Branch master:

    git checkout master
    
    BRANCH=`git rev-parse --abbrev-ref HEAD` && git describe --tags 
    --abbrev=0 $BRANCH^ | grep $BRANCH
    
    master-1448
    

    Branch custom:

    git checkout 9.4
    
    BRANCH=`git rev-parse --abbrev-ref HEAD` && git describe --tags 
    --abbrev=0 $BRANCH^ | grep $BRANCH
    
    9.4-6
    

    And my final need to increment and get the tag +1 for next tagging.

    BRANCH=`git rev-parse --abbrev-ref HEAD` && git describe --tags  --abbrev=0 $BRANCH^ | grep $BRANCH | awk -F- '{print $NF}'
    
    0 讨论(0)
  • 2020-11-22 17:18

    How about this?

    TAG=$(git describe $(git rev-list --tags --max-count=1))

    Technically, won't necessarily get you the latest tag, but the latest commit which is tagged, which may or may not be the thing you're looking for.

    0 讨论(0)
  • The following works for me in case you need last two tags (for example, in order to generate change log between current tag and the previous tag). I've tested it only in situation where the latest tag was the HEAD.

    PreviousAndCurrentGitTag=`git describe --tags \`git rev-list --tags --abbrev=0 --max-count=2\` --abbrev=0`
    PreviousGitTag=`echo $PreviousAndCurrentGitTag | cut -f 2 -d ' '`
    CurrentGitTag=`echo $PreviousAndCurrentGitTag | cut -f 1 -d ' '`
    
    GitLog=`git log ${PreviousGitTag}..${CurrentGitTag} --pretty=oneline | sed "s_.\{41\}\(.*\)_; \1_"`
    

    It suits my needs, but as I'm no git wizard, I'm sure it could be further improved. I also suspect it will break in case the commit history moves forward. I'm just sharing in case it helps someone.

    0 讨论(0)
  • 2020-11-22 17:18

    Not much mention of unannotated tags vs annotated ones here. 'describe' works on annotated tags and ignores unannotated ones.

    This is ugly but does the job requested and it will not find any tags on other branches (and not on the one specified in the command: master in the example below)

    The filtering should prob be optimized (consolidated), but again, this seems to the the job.

    git log  --decorate --tags master |grep '^commit'|grep 'tag:.*)$'|awk '{print $NF}'|sed 's/)$//'|head -n 1
    

    Critiques welcome as I am going now to put this to use :)

    0 讨论(0)
  • 2020-11-22 17:20

    To get the most recent tag (example output afterwards):

    git describe --tags --abbrev=0   # 0.1.0-dev
    

    To get the most recent tag, with the number of additional commits on top of the tagged object & more:

    git describe --tags              # 0.1.0-dev-93-g1416689
    

    To get the most recent annotated tag:

    git describe --abbrev=0
    
    0 讨论(0)
  • 2020-11-22 17:20

    To get the most recent tag, you can do:

    $ git for-each-ref refs/tags --sort=-taggerdate --format='%(refname)' --count=1
    

    Of course, you can change the count argument or the sort field as desired. It appears that you may have meant to ask a slightly different question, but this does answer the question as I interpret it.

    0 讨论(0)
提交回复
热议问题