Re: [PATCH v4] Introduce %<branch> as shortcut to the tracked branch
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:46:26
Johannes Schindelin [off-list ref] writes:
Often, it is quite interesting to inspect the branch tracked by a given branch. This patch introduces a nice notation to get at the tracked branch: '%<branch>' can be used to access that tracked branch. A special shortcut '%' refers to the branch tracked by the current branch. Suggested by Pasky. Even if a branch name can legally start with a '%' sign, we can use the special character '%' here, as you can always specify the full ref: refs/heads/%my-branch (pointed out by doener on IRC).
That is not a good argument, as %<name> is (just like name@{-n} is) a
substitute way to spell the "name" of a branch, not just a random SHA-1,
and to some commands it makes a difference between <branchname> and
refs/heads/<branchname>. The latter is not giving the name of the branch,
but merely a commit object name.
An most obvious one is that "git checkout branchname" and "git checkout
refs/heads/branchname" behave differently. You cannot checkout a branch
called %master after this patch goes in.
Just be honest and say "You may have a branch whose name begins with a '%'
and you cannot refer to it anymore in certain contexts. Too bad. Don't
do it next time you create a new branch". I _can_ buy that argument.
It however asks for a sane escape hatch. You cannot "fix" such branch
names in most obvious ways (if you could, that would be a bug in this %
feature).
(1) git branch -m %master percent-master
We would end up renaming what master tracks to new name.
(2) git branch percent-master refs/heads/%master; git branch -d %master
The first part is a good try, but the latter deletes what master
tracks.
"git update-ref -d refs/heads/%master" needs to replace the second step of
the latter.