In git
, a tag
(like many other things) is what's called a treeish. It's a way of referring to a point in the history of the project. Treeishes can be a tag, a commit, a date specifier, an ordinal specifier or many other things. A branch is just like a tag but is movable. When you are on a branch and make a commit, the branch is moved to the new commit you made indicating it's current position.
Your HEAD
is a pointer to a branch which is considered "current". Usually when you clone a repository, HEAD
will point to master which in turn will point to a commit. When you then do something like git checkout experimental
, you switch the HEAD
to point to the experimental
branch, which might point to a different commit.
When you do a git checkout v2.0
(v2.0
in this case is a tag), you are switching to a commit that is not pointed to by a branch. The HEAD
is now "detached" and not po