'Git: How to find out on which branch a tag is?

I'm currently busy with a project with a lot of branches and I have a tag for last changes which where done on one of the branches. But it's not clear for me on which branch this tag is.

How to find out on which branch a tag is?



Solution 1:[1]

If "git branch --contains " does nothing, be sure that you are including all branches, both remote and local branches:

git branch -a --contains <tag>

From the git help:

Specific git-branch actions: -a, --all list both remote-tracking and local branches

Solution 2:[2]

In regards to @VonC's comment about finding the commit referenced by a tag, just use:

git show <tag>

Since a tag is tied to a specific commit, it can be used to show that commit - which will give you the full commit details.

Solution 3:[3]

git branch --contains tag

does nothing for me, but I found my solution to this problem in git gui.

Start it like this:

git gui

(On my Ubuntu I had to install it first with sudo apt-get install git-gui.)

Then I selected the menu item Repository -> Visualize All Branch History. In the resulting window I then selected the menu item File -> List References.

Another window popped up, listing all my tags (and other references). These are clickable and after clicking one of them I just had to check the bottom left frame for the list of branches. Like this:

Parent: somesha (message)
Parent: someothersha (another message)
Child:  anothersha (yet another message)
Branches: branch1, master, remotes/origin/branch2, remotes/upstream/branch1, etc
Follows: v1.1.2
Precedes: v1.1.4

Solution 4:[4]

You can also try this , had similar use case and this worked for me

git ls-remote --heads origin | grep $CI_COMMIT_SHORT_SHA  | sed "s/.*\///"

Slightly different but taking inspiration from @ttfreeman's answer

Solution 5:[5]

My problem with the top answers here—

—specifically solutions like

git branch -a --contains TAG

and similar had the problem of being able to list multiple branches in the output, and it isn't clear which is the one the tag ACTUALLY originated in:

$  git branch --contains TAG
   branch-A
   branch-B
 * branch-C
   branch-D

(the * marks the current branch = not relevant)

Oh, and sorting with --sort=-committerdate or =-taggerdate doesn't exactly clarify the original branch, since these ref attributes can be updated by actions not related to the TAG in question.

git show tag

DID give me the true answer to my question ("which branch was this tag created on?"), however the git show format is quite bulky by default, and what I was looking for was an efficient, machine-friendly output format in order to pass to some automated scripts.

So turns out, git log is the core command for the job:

git log -1 --pretty='%D' TAG

This gives output like:

tag: TAG, origin/branch-B, branch-B

Which tells us exactly the branch the tag originated on, and is much more machine-readable.

Solution 6:[6]

With a Tag you mark a reference. So when you are on a dev branch and Tag this state. Your tag is on the actual reference. So in this case you can look to gitk or another tool where the tree is shown. There you can see on which reference the Tag is.

git: Is there something like per-branch tags?
http://git-scm.com/book/en/Git-Basics-Tagging

Here is a good explanation.

Solution 7:[7]

A tag is always referring to commit number. Using that tag number you can find the branch from which the tag was placed using this:

git for-each-ref | grep ${commit_num} | grep origin | sed "s/.*\///"

Solution 8:[8]

Step 1. Get commit id:

git show {tag name}

Step 2. Copy commit id and paste to get all branches:

By example:
git branch --contains 94a152c2d1c6830c5a044ecf20526d51e64bda83

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 david1977
Solution 2 arpieb
Solution 3
Solution 4 David Buck
Solution 5 Pyr3z
Solution 6 Community
Solution 7 ttfreeman
Solution 8