In some cases the behavior of a command depends on whether it is given branch name, tag name, or an arbitrary revision. You can use "de-referencing" syntax if you need the latter.
A suffix ^
followed by an object type name (tag
, commit
, tree
, blob
) enclosed in brace pair (for example v0.99.8^{commit}
) means dereference the object at <rev>
recursively until an object of type <type>
is found or the object cannot be dereferenced anymore. <rev>^0
is a short-hand for <rev>^{commit}
.
$ git checkout HEAD^0 # equivalent to 'git checkout --detach' in modern Git
A suffix ^
followed by an empty brace pair (for example v0.99.8^{}
) means to dereference the tag recursively until a non-tag object is found.
Compare
$ git show v1.0
$ git cat-file -p v1.0
$ git replace --edit v1.0
with
$ git show v1.0^{}
$ git cat-file -p v1.0^{}
$ git replace --edit v1.0^{}