Re: [PATCH] checkout: allow full refnames for local branches
- From
Junio C Hamano <junkio@cox.net>
- Date
- May 9, 2007, 19:37 UTC
- Message-ID
- <7v8xbxu6u0.fsf@assigned-by-dhcp.cox.net>
- In-Reply-To
- <8c5c35580705090207y2979aaa5u7ce9de5fa1dfe658@mail.gmail.com>
"Lars Hjemli" <hjemli@gmail.com> writes:
Show 13 quoted lines
> On 5/9/07, Junio C Hamano <junkio@cox.net> wrote: >> Lars Hjemli <hjemli@gmail.com> writes: >> >> > This teaches git-checkout to strip the prefix 'refs/heads/' from the >> > supplied <branch> argument >> >> Why is this necessary, may I ask? >> > > I'm playing around with a gui frontend, and there I use > git-for-each-ref to obtain possible arguments for git-checkout. That's > how I discovered the 'problem', and solved it by stripping > 'refs/heads/' in my frontend.
Pathspec-less variant of "git checkout" takes two kinds of parameters and has two flavours in its behaviour:
(1) an exact branch name, in which case it switches to the
branch; otherwise (2) any arbitrary commit object name, in whch case it checks
out and detaches HEAD.A tricky part is that an exact branch name is often a perfectly valid commit object name, so rule (1) trumps the rule (2). You just discovered a way to have a detached HEAD at a commit that happens to be at an existing branch -- by naming that commit without using its exact branch name.
An easier way to spell that would be:
$ git checkout master^0
but
master^0
heads/master
refs/heads/masterare all perfectly good ways to talk about the commit at the tip of the 'master' branch without spelling it as an exact branch name (which is 'master').