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

bug: HEAD vs. head on case-insensitive filesystems

From
KHKenneth Hsu <kennethhsu@gmail.com>
Date
Jul 11, 2017, 03:32 UTC
Message-ID
<20170711033236.GA11492@lenny.localdomain>

I'm not sure what the general consensus is regarding the use of "head" vs. "HEAD" on case insensitive filesystems, but it appears that some confusing behavior (bug?) may have arisen.

To summarize, "HEAD" and "head" may resolve to different revisions when in a worktree. The following example was generated using git version 2.13.1 for Mac (HFS+):

$ git --version git version 2.13.1 $ git init Initialized empty Git repository in /Users/ken/Desktop/test/.git/

$ echo "Hello" > hello.txt $ git add . && git commit -qm "Add hello."

$ echo "Bye" > bye.txt $ git add . && git commit -qm "Add bye."

Note that at this point, both HEAD and head (correctly) resolve to the same revision:

$ git rev-parse HEAD 4a71a947fb683698f80f543f9cd27acd066e2659

$ git rev-parse head 4a71a947fb683698f80f543f9cd27acd066e2659

However, if we create (and cd into) a worktree based on "master~", "HEAD" and "head" resolve to _different_ revisions:

$ git worktree add -b feature/branch ../branch master~ Preparing ../branch (identifier branch) HEAD is now at f752545 Add hello. $ cd ../branch/

$ git rev-parse HEAD f7525451640f6f5e8842cc00b6639c80558dd6c2

$ git rev-parse head 4a71a947fb683698f80f543f9cd27acd066e2659

$ git rev-parse master 4a71a947fb683698f80f543f9cd27acd066e2659

$ git rev-parse master~ f7525451640f6f5e8842cc00b6639c80558dd6c2

$ git rev-parse feature/branch f7525451640f6f5e8842cc00b6639c80558dd6c2

Note that "HEAD" resolves to the same revision as "master~" and "feature/branch" (which seems correct since that is what the worktree was based on), while "head" resolves to the same revision as "master".

This appears to affect other case-insensitive filesystems (Windows) as well. See the following bug report:

https://github.com/git-for-windows/git/issues/1225

I'm not sure if the behavior is well-defined when using "head", but the above example may illustrate a case where users should not assume that they resolve to the same thing.

Thanks.
Next: Jeff King
Message 1 of 3 in “bug: HEAD vs. head on case-insensitive filesystems”
  1. Kenneth HsuJul 11, 2017
  2. Jeff KingJul 11, 2017
  3. Kenneth HsuJul 12, 2017

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.