To show all references called "master", whether tags or heads or anything
else, and regardless of how deep in the reference naming hierarchy they are,
use:
This will show "refs/heads/master" but also "refs/remote/other-repo/master",
if such references exist.
When using the --verify flag, the command requires an exact path:
git show-ref --verify refs/heads/master
will only match the exact branch called "master".
If nothing matches, git show-ref will return an error code of 1,
and in the case of verification, it will show an error message.
For scripting, you can ask it to be quiet with the --quiet flag, which
allows you to do things like
git show-ref --quiet --verify -- "refs/heads/$headname" ||
echo "$headname is not a valid branch"
to check whether a particular branch exists or not (notice how we don’t
actually want to show any results, and we want to use the full refname for it
in order to not trigger the problem with ambiguous partial matches).
To show only tags, or only proper branch heads, use --tags and/or --heads
respectively (using both means that it shows tags and heads, but not other
random references under the refs/ subdirectory).
To do automatic tag object dereferencing, use the -d or --dereference
flag, so you can do
git show-ref --tags --dereference
to get a listing of all tags together with what they dereference.