threads / bug / 7985

Git branch bug

Subject: Git branch bug

## tl;dr

7 messages between May 5, 2007 and May 6, 2007.

replies: 6people: 4as markdown or json

Guido Ostkamp· May 5, 2007, 16:24 UTC · lore
Hello,
I would like to report the following bug:

$ mkdir test $ cd test $ git init Initialized empty Git repository in .git/ $ git branch experimental fatal: Not a valid object name: 'master'.

So, it seems it is not possible to create a named branch on an empty repository.

I'm not subscribed to the list, so please keep me directly on CC for any reply, thanks.

Regards
Guido
Johannes Schindelin· May 5, 2007, 16:42 UTC · re: Guido Ostkamp · lore

Re: Git branch bug

Hi,
On Sat, 5 May 2007, Guido Ostkamp wrote:
Show 9 quoted lines
> $ mkdir test
> $ cd test
> $ git init
> Initialized empty Git repository in .git/
> $ git branch experimental
> fatal: Not a valid object name: 'master'.
> 
> So, it seems it is not possible to create a named branch on an empty
> repository.

Actually, it is not possible to branch from a non-existing branch. So, this is somewhat expected from my POV.

Ciao, Dscho

Daniel Barkalow· May 5, 2007, 17:05 UTC · re: Johannes Schindelin · lore

Re: Git branch bug

On Sat, 5 May 2007, Johannes Schindelin wrote:
Show 16 quoted lines
> Hi,
> 
> On Sat, 5 May 2007, Guido Ostkamp wrote:
> 
> > $ mkdir test
> > $ cd test
> > $ git init
> > Initialized empty Git repository in .git/
> > $ git branch experimental
> > fatal: Not a valid object name: 'master'.
> > 
> > So, it seems it is not possible to create a named branch on an empty
> > repository.
> 
> Actually, it is not possible to branch from a non-existing branch. So, 
> this is somewhat expected from my POV.

This leaves open the question of how you make your initial commit in a branch that isn't master. I think the answer should be:

 $ git checkout -b experimental
 warning: You appear to be on a branch yet to be born.
 warning: Forcing checkout of HEAD.
 fatal: just how do you expect me to merge 0 trees?
Which should probably be:
 $ git checkout -b experimental
 warning: You appear to be on a branch yet to be born.
 warning: Putting you on a new branch yet to be born.

And leaving .git/HEAD pointing to refs/heads/experimental instead of refs/heads/master, with refs/heads/ still empty.

 $ git branch experimental

Should probably give a more informative error message, but branches with no commits that aren't the current branch has no existance at all, so it can't work to create them without switching to them.

	-Daniel
*This .sig left intentionally blank*
Junio C Hamano· May 6, 2007, 06:30 UTC · re: Daniel Barkalow · lore

Re: Git branch bug

Daniel Barkalow <barkalow@iabervon.org> writes:
Show 16 quoted lines
> This leaves open the question of how you make your initial commit in a 
> branch that isn't master. I think the answer should be:
>
>  $ git checkout -b experimental
>  warning: You appear to be on a branch yet to be born.
>  warning: Forcing checkout of HEAD.
>  fatal: just how do you expect me to merge 0 trees?
>
> Which should probably be:
>
>  $ git checkout -b experimental
>  warning: You appear to be on a branch yet to be born.
>  warning: Putting you on a new branch yet to be born.
>
> And leaving .git/HEAD pointing to refs/heads/experimental instead of 
> refs/heads/master, with refs/heads/ still empty.

While I agree that is probably correct, it would not be useful in real-life that much. When you do not even have 'master', I do not think there is much point of being able to create two useless, yet-to-be-born branches.

Also, once you make a commit on 'master', you would not be able to create a new disconnected root with your suggestion alone. I am not convinced that being able to start a disconnected root is useful to begin with, but it is a different matter. We allow fetching and merging from a different repository to cause disconnected roots to exist in a repository anyway, so I do not see any reason to disallow it either.

Assuming that the ability to switch to a new yet-to-be-born branch is useful, I think the right thing to do is:

 - Regardless of your HEAD state, you may want to have a way to
   create a yet-to-be-born branch and switch to it.  Perhaps
   "git checkout -e new" make HEAD point at refs/heads/new
   without creating one (I picked -e randomly for "empty").
 - When you are on a yet-to-be-born branch, "git checkout -b
   new" and "git checkout -b new HEAD" makes HEAD point at
   refs/heads/new without creating one.  I happen to consider
   this a not so useful corner case, but that is to make things
   consistent.
 - When you are on a yet-to-be-born branch, "git branch new" and
   "git branch new HEAD" is a nonsense operation.  We should
   clearly state that it is nonsense (I am agreeing with the
   last point in your message).
Daniel Barkalow· May 6, 2007, 16:16 UTC · re: Junio C Hamano · lore

Re: Git branch bug

On Sat, 5 May 2007, Junio C Hamano wrote:
Show 23 quoted lines
> Daniel Barkalow <barkalow@iabervon.org> writes:
> 
> > This leaves open the question of how you make your initial commit in a 
> > branch that isn't master. I think the answer should be:
> >
> >  $ git checkout -b experimental
> >  warning: You appear to be on a branch yet to be born.
> >  warning: Forcing checkout of HEAD.
> >  fatal: just how do you expect me to merge 0 trees?
> >
> > Which should probably be:
> >
> >  $ git checkout -b experimental
> >  warning: You appear to be on a branch yet to be born.
> >  warning: Putting you on a new branch yet to be born.
> >
> > And leaving .git/HEAD pointing to refs/heads/experimental instead of 
> > refs/heads/master, with refs/heads/ still empty.
> 
> While I agree that is probably correct, it would not be useful
> in real-life that much.  When you do not even have 'master', I
> do not think there is much point of being able to create two
> useless, yet-to-be-born branches.

The point is that you may not want to have a branch named "master", but rather want your first branch to be named something else. Your project could be such that "master" would be a confusing term to use for a default branch. Currently, it's awkward to start a project that avoids that particular name, which is what it seemed to me that the original poster was trying to do.

I don't think it's useful to be able to switch to a new yet-to-be-born branch from any other state, but I do think it's useful to be able to choose what the first branch is.

	-Daniel
*This .sig left intentionally blank*
Guido Ostkamp· May 5, 2007, 17:44 UTC · re: Johannes Schindelin · lore

Re: Git branch bug

Show 14 quoted lines
> On Sat, 5 May 2007, Guido Ostkamp wrote:
>
>> $ mkdir test
>> $ cd test
>> $ git init
>> Initialized empty Git repository in .git/
>> $ git branch experimental
>> fatal: Not a valid object name: 'master'.
>>
>> So, it seems it is not possible to create a named branch on an empty
>> repository.
>
> Actually, it is not possible to branch from a non-existing branch. So,
> this is somewhat expected from my POV.
>From a git beginners point of view, I would expect that the 'master' 

branch is automatically created when performing the 'git init'. Why is this not the case?

Regards
Guido
Johannes Schindelin· May 5, 2007, 17:54 UTC · re: Guido Ostkamp · lore

Re: Git branch bug

Hi,
On Sat, 5 May 2007, Guido Ostkamp wrote:
Show 18 quoted lines
> > On Sat, 5 May 2007, Guido Ostkamp wrote:
> > 
> > > $ mkdir test
> > > $ cd test
> > > $ git init
> > > Initialized empty Git repository in .git/
> > > $ git branch experimental
> > > fatal: Not a valid object name: 'master'.
> > > 
> > > So, it seems it is not possible to create a named branch on an empty
> > > repository.
> > 
> > Actually, it is not possible to branch from a non-existing branch. So,
> > this is somewhat expected from my POV.
> 
> From a git beginners point of view, I would expect that the 'master' 
> branch is automatically created when performing the 'git init'. Why is 
> this not the case?

Well, one side of the branch _is_ created. But you have to provide initial content, to make it a proper branch, from which you can actually branch off.

Having said that, and having read Daniels mail, I agree that this behaviour should be changed, along with the behaviour of "git checkout -b <branch>" in a fresh repo.

It might be the illogical thing, to allow branching of a yet-to-be-initialised branch, but it does not hurt either.

Ciao, Dscho

← back to recent threads