Linus Torvalds [off-list ref] writes:
HEAD is not a tag. Never has been, never will be. If you want me to
pull a tag, then you damn well should say what tag you want, not just
randomly say HEAD.
So what is it you want to do? At no point is "HEAD should resolve as a
tag" sensible.
"HEAD should resolve as a tag" is not sensible, but "HEAD should
locally DWIM to something sensible" is still possible, no?
We could for example make the rule for unset $3 case like this,
instead of the current "missing $3 is a request to pull HEAD":
If you have one and only one signed tag that happens to point at
the commit sitting at HEAD, behave as if that tag was given as
the third argument from the command line.
Otherwise, if you are on a branch, behave as if that branch was
given as the third argument from the command line.
If you are not on any branch, error out.