Re: Where is git checkout --orphan implemented at.
- From
Jeff King <peff@peff.net>
- Date
- Jun 5, 2018, 17:54 UTC
- Message-ID
- <20180605175435.GA22321@sigill.intra.peff.net>
- In-Reply-To
- <2ED916AA-3E6A-4E22-9B9B-13C3B687B357@icloud.com>
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