Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

list tags contained by a branch

Tags:

git

How can I list tags contained by a given branch, the opposite of:

git tag --contains <commit> 

Which "only list tags which contain the specified commit".

If something like this does not exist, how do I test whether a commit is contained by another commit so that I can script this?

I could do this:

commit=$(git rev-parse $branch) for tag in $(git tag) do     git log --pretty=%H $tag | grep -q -E "^$commit$" done 

But I hope there is a better way as this might take a long time in a repository with many tags and commits.

like image 687
tarsius Avatar asked Mar 04 '10 18:03

tarsius


2 Answers

git tag --merged <branch> 

From the man page:

--[no-]merged <commit>  Only list tags whose tips are reachable, or not reachable if --no-merged is used, from the specified commit (HEAD if not specified). 

I believe this option was added quite recently - it definitely wasn't available back when the original question was posed and the above answers suggested. Since this thread is still the first hit in Google for the question I figured I'd throw it in for anyone who scrolls down to the bottom looking for an answer that involves less typing than the accepted answer (and for my own reference when I forget this answer again next week).

like image 152
JamHandy Avatar answered Oct 06 '22 05:10

JamHandy


This might be close to what you want:

git log --simplify-by-decoration --decorate --pretty=oneline "$committish" | fgrep 'tag: ' 

But, the more common situation is to just find the most recent tag:

git describe --tags --abbrev=0 "$committish" 
  • --tags will search against lightweight tags, do not use it if you only want to consider annotated tags.
  • Do not use --abbrev=0 if you want to also see the usual “number of ‘commits on top’ and abbreviated hash” suffix (e.g. v1.7.0-17-g7e5eb8).
like image 25
Chris Johnsen Avatar answered Oct 06 '22 03:10

Chris Johnsen