Re: bug? in checkout with ambiguous refnames
- From
Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>
- Date
- Jan 9, 2011, 16:18 UTC
- Message-ID
- <alpine.DEB.1.10.1101090847120.12031@debian>
- In-Reply-To
- <7v1v4m8reh.fsf@alter.siamese.dyndns.org>
On Sat, 8 Jan 2011, Junio C Hamano wrote:
Show 26 quoted lines
> Jeff King <peff@peff.net> writes: > > > On Sat, Jan 08, 2011 at 03:40:33PM -0500, Martin von Zweigbergk wrote: > > > >> > Yeah, we generally resolve ambiguities in favor of the tag (and that > >> > warning comes from deep within get_sha1_basic). So the real bug here is > >> > that it still said "Switched to branch", which is totally wrong. > >> > > >> > That being said, it probably would make more sense for "git checkout" to > >> > prefer branches to tags. > >> > >> What was the rationale for generally favoring tags? > > > > I don't recall hearing any specific argument, but it has always been > > that way from early on. I think it is from a vague sense of "tags are > > more important than branch tips because they are about marking specific > > points, not lines of development". But maybe other old-timers can say > > more. > > > Aside from your "'checkout branch' is about checking out a branch" > explanation, there are two reasons to favor branches over tags in > "checkout" command: > > (1) You cannot disambiguate "git checkout heads/master" when you have > "master" tag, as this notation is used to tell the command "I want to > detach HEAD at that commit"; and
Interesting. I had no idea that 'git checkout heads/master' means to detach the HEAD. Thanks.
By analogy, I guess that means that 'git rebase master heads/topic' is supposed to rebase a detached HEAD, so I will stop trying to "fix" that then :-)
> (2) The command already treats an unadorned branch name specially by not > complaining ref/path ambiguity when you said "git checkout master" > and you have a file called "master" in your working tree, so users > already expect that an unadorned branch name is special to it.
If I understand correctly, that actually applies to tags as well. Checking out a tag called e.g. Makefile doesn't give any warnings or errors.
/Martin