Subject: git-commit bug (was Re: Editing the root commit)

From: Chris Webb <[email-masked]>
Date: Tue, 26 Jun 2012 16:04:37 +0100

Chris Webb <[email-masked]> writes:

> PS Whilst experimenting, I also noticed a (presumably unintentional)
> behaviour:
> 
>   $ git init .
>   Initialized empty Git repository in /tmp/foo/.git/
>   $ git checkout --detach
>   $ touch bar
>   $ git add bar
>   $ git commit -m test
>   [(null) (root-commit) 17b5bf9] test
>    0 files changed
>    create mode 100644 bar
>   $ ls .git/refs/heads/
>   (null)
>   $
> 
> Here we've created a branch with the strange name '(null)' instead of
> actually detaching, or refusing to detach because we're on an unborn
> branch.

This was introduced by abe199808c, which is intended to allow

  git init . && git checkout --orphan newbranch

but presumably wasn't also meant to enable

  git checkout --orphan foo
  git checkout --detach

This leads to a printf("%s", NULL) and thus

  $ git symbolic-ref HEAD
  refs/heads/(null)

I've followed up to this message with a patch including a test to catch this
in future.

Best wishes,

Chris.