git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: I want to report a bug/anomaly in Git

From
Jeff King <peff@peff.net>
Date
Jan 12, 2011, 18:35 UTC
Message-ID
<20110112183556.GD31747@sigill.intra.peff.net>
In-Reply-To
<AANLkTimt+U3oo4FaywUr86ArG8d29yWAeVYhpRkBYa_K@mail.gmail.com>
On Tue, Jan 11, 2011 at 10:22:29PM +0000, Tony Sales wrote:
Show 8 quoted lines
> The bug is that if you happen to create a new remote branch which
> shares it's name with an existing directory in the top level of the
> git repository, git then seems to get confused and the: git checkout
> <branch> - command doesn't switch to that branch or turn tracking on
> (and seems to think it was created from origin/<branch> rather than
> from refs/remotes/origin/<branch>), which it does if the branch
> doesn't share a name with an existing top level directory. This can be
> rectified by running: git checkout --track -b debian origin/debian

I don't think this is a bug so much as a confusing application of too much DWIMmery in git-checkout. "git checkout foo" can mean several things:

  1. If it's a branch name, then switch to that branch.
  2. Otherwise, if it's a tag name, switch to a detached HEAD at that
     tag.
  3. Otherwise, if it's a file known to git, then checkout its content
     in the index into the working tree.
  4. Otherwise, if there is a remote branch that matches
     refs/remotes/*/foo, create a new branch "foo" that tracks it.

So the problem is that you expect behavior (4), but behavior (3) is getting in the way.

I assume it was written this way because (4) came much later, and therefore came last so as not to break existing behavior for the other cases. Conceptually, though, I think it makes more sense for it to come (3) (i.e., to keep all of the "checking out a ref" behavior together). And one can disambiguate the path-mode already by doing:

  git checkout -- debian
-Peff
Previous: Tony Sales
Message 2 of 2 in “I want to report a bug/anomaly in Git”
  1. Tony SalesJan 11, 2011
  2. Jeff KingJan 12, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.