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.
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).
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.--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).If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With