Re: [PATCH v4] Introduce %<branch> as shortcut to the tracked branch
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Mar 20, 2009, 17:03 UTC
- Message-ID
- <7v7i2ki0sw.fsf@gitster.siamese.dyndns.org>
- In-Reply-To
- <alpine.DEB.1.00.0903201714020.10279@pacific.mpi-cbg.de>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 11 quoted lines
> 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.