threads / discuss / 48659

Where is git checkout --orphan implemented at.

Subject: Where is git checkout --orphan implemented at.

## tl;dr

4 messages between Jun 5, 2018 and Jun 11, 2018.

replies: 3people: 3as markdown or json

Sean Hunt· Jun 5, 2018, 16:02 UTC · lore
I would like to see the source code to git checkout --orphan so I can learn how it works and so I can manually do what it does by hand on making a new branch with no history in the refs folder. I can only do it on my iPhone as my laptop has no internet or way to do it there, and the program on my iPhone does not have the method implemented yet visually to do it, forcing manual creation of the orphan branch by hand in the end. If the public github had all the codes to all commands and subcommands like the one above it would be nice or well at least a file that explains the source file each command and subcommands are from so that way a person like me can use as a reference to make our own git gui that has 100% of command line git features.
Sent from my iPhone
Jeff King· Jun 5, 2018, 17:54 UTC · re: Sean Hunt · lore

Re: Where is git checkout --orphan implemented at.

On Tue, Jun 05, 2018 at 12:02:12PM -0400, Sean Hunt wrote:
Show 12 quoted lines
> I would like to see the source code to git checkout --orphan so I can
> learn how it works and so I can manually do what it does by hand on
> making a new branch with no history in the refs folder. I can only do
> it on my iPhone as my laptop has no internet or way to do it there,
> and the program on my iPhone does not have the method implemented yet
> visually to do it, forcing manual creation of the orphan branch by
> hand in the end. If the public github had all the codes to all
> commands and subcommands like the one above it would be nice or well
> at least a file that explains the source file each command and
> subcommands are from so that way a person like me can use as a
> reference to make our own git gui that has 100% of command line git
> features.
The code for "checkout --orphan" is in builtin/checkout.c[1].

But if you want to do roughly the same thing with other tools, you can do:

 git symbolic-ref HEAD refs/heads/new-branch
If you don't even have symbolic-ref handy, you can do:
  echo "ref: refs/heads/new-branch" >.git/HEAD

That's not generally recommended, since future versions of Git may change the ref storage format, but it would work with any current version of Git.

-Peff
[1] Try update_refs_for_switch(), especially:
    https://github.com/git/git/blob/61856ae69a2ceb241a90e47953e18f218e4d5f2f/builtin/checkout.c#L635
    and
    https://github.com/git/git/blob/61856ae69a2ceb241a90e47953e18f218e4d5f2f/builtin/checkout.c#L695
Junio C Hamano· Jun 11, 2018, 17:35 UTC · re: Jeff King · lore

Re: Where is git checkout --orphan implemented at.

Jeff King <peff@peff.net> writes:
Show 7 quoted lines
> If you don't even have symbolic-ref handy, you can do:
>
>   echo "ref: refs/heads/new-branch" >.git/HEAD
>
> That's not generally recommended, since future versions of Git may
> change the ref storage format, but it would work with any current
> version of Git.

Makes one wonder if it really "works" if .git/HEAD was created by older version of Git or in a repository where prefer-symlink-refs is enabled, though ;-)

Jeff King· Jun 11, 2018, 21:09 UTC · re: Junio C Hamano · lore

Re: Where is git checkout --orphan implemented at.

On Mon, Jun 11, 2018 at 10:35:40AM -0700, Junio C Hamano wrote:
Show 13 quoted lines
> Jeff King <peff@peff.net> writes:
> 
> > If you don't even have symbolic-ref handy, you can do:
> >
> >   echo "ref: refs/heads/new-branch" >.git/HEAD
> >
> > That's not generally recommended, since future versions of Git may
> > change the ref storage format, but it would work with any current
> > version of Git.
> 
> Makes one wonder if it really "works" if .git/HEAD was created by
> older version of Git or in a repository where prefer-symlink-refs is
> enabled, though ;-)
Heh, true. I guess "rm -f .git/HEAD" before would "fix" it.
-Peff

← back to recent threads