tags:

views:

80

answers:

2

I have some trouble with finding the tag that is checked out.

When I do:

git checkout tag1
git branch

I can't seem to find out which tag I'm on. It only logs:

* (no branch)
master

Is it possible to find out which tag that are checked out, that is, in the above example, 'tag1'. Thank you!

+5  A: 

When you check out a tag, you have what's called a "detached head". Normally, Git's HEAD commit is a pointer to the branch that you currently have checked out. However, if you check out something other than a local branch (a tag or a remote branch, for example) you have a "detached head" -- you're not really on any branch. You should not make any commits while on a detached head.

It's okay to check out a tag if you don't want to make any edits. If you're just examining the contents of files, or you want to build your project from a tag, it's okay to git checkout my_tag and work with the files, as long as you don't make any commits. If you want to start modifying files, you should create a branch based on the tag:

$ git checkout -b my_tag_branch my_tag

will create a new branch called my_tag_branch starting from my_tag. It's safe to commit changes on this branch.

mipadi
+3  A: 

Edit: Jakub Narębski has more git-fu. The following much simpler command works perfectly:

git describe --tags

(Or without the --tags if you have checked out an annotated tag. My tag is lightweight, so I need the --tags.)

original answer follows:

git describe --exact-match --tags $(git log -n1 --pretty='%h')

Someone with more git-fu may have a more elegant solution...

This leverages the fact that git-log reports the log starting from what you've checked out. %h prints the abbreviated hash. Then git-describe --exact-match --tags finds the tag (lightweight or annotated) that exactly matches that commit.

The $() syntax above assumes you're using bash or similar.

bstpierre
Just using `git describe` would show tag name if you are exactly on (annotated) tag, or `<tag>-<n>-g<shortened sha-1>` if not, where `<n>` is number of commits since `<tag>`.
Jakub Narębski
@Jakub - Thanks. I added `--exact-match` to my answer seconds before your comment. Nice to know that you can remove it and still get good info from fuzzier input.
bstpierre
Thanks, this was exactly what I was looking for. Btw, even git-describe --exact-match (without --tags) works for me.
grm
Using `git rev-parse HEAD` is a better solution than `git log -n1 --pretty='%h'`... but why you cannot simply write `HEAD` (or nothing, as `git describe` defaults to HEAD)?
Jakub Narębski
@Jakub - Even better, thanks again.
bstpierre