Skip to contentSkip to conversation

Checking out orphans with -f

DISCUSSION Martin Fick 2 participants 5 messages Jun 15, 2016

lore
Share & tools
lore
#0 lore raw

I am trying to write some scripts which do various things to a git repo and I have run into a issue where I think that git behavior with respect to orphan branches is potentially undesirable. If I type:

  git checkout --orphan a

I cannot easily abandon this state by simply typing:

  git check -f --orphan b

Is there a better simpler way to abandon a that I am not aware of? Am I miss understanding what -f is supposed to do? It seems like it should allow me to abandon the a orphan and continue to checkout the b orphan?

Thanks for any insights,

-Martin

Signature · 2 lines
Employee of Qualcomm Innovation Center, Inc. which is a 
member of Code Aurora Forum
#1 lore raw
Quoted 8 lines · Martin Fick

I am trying to write some scripts which do various things to a git repo and I have run into a issue where I think that git behavior with respect to orphan branches is potentially undesirable. If I type:

  git checkout --orphan a

I cannot easily abandon this state

What do you mean by "abandon"?

If you want to remove a branch "a" because you do not need it, you can check out some other branch and say "git branch -D a", no?

#2 lore raw
Quoted 9 lines · Junio C Hamano
Quoted 8 lines · Martin Fick

I am trying to write some scripts which do various things to a git repo and I have run into a issue where I think that git behavior with respect to orphan branches is potentially

undesirable. If I type:
git checkout --orphan a

Quoted 7 lines
Quoted 1 line

I cannot easily abandon this state

What do you mean by "abandon"?

If you want to remove a branch "a" because you do not need it, you can check out some other branch and say "git branch -D a", no?

By abandon, I simply mean to check out another branch, which as you point, I can almost do. I just can't do it by checking out another orphaned branch! Why not, this seems inconsistent? In both cases I loose what the original orphaned branch (a) is, so why prevent me from doing it in the one case and not the other?

-Martin

Signature · 2 lines
Employee of Qualcomm Innovation Center, Inc. which is a 
member of Code Aurora Forum
#3 lore raw
In reply to Junio C Hamano
Quoted 9 lines · Junio C Hamano
Quoted 8 lines · Martin Fick

I am trying to write some scripts which do various things to a git repo and I have run into a issue where I think that git behavior with respect to orphan branches is potentially

undesirable. If I type:
git checkout --orphan a

Quoted 7 lines
Quoted 1 line

I cannot easily abandon this state

What do you mean by "abandon"?

If you want to remove a branch "a" because you do not need it, you can check out some other branch and say "git branch -D a", no?

Actually, no I can't. I can check out some other branch (assuming I have one), but I cannot then delete a, it appears to already be deleted by virtue of checking out another branch. I like that since I never checked it in, better to clean up the garbage, but why can't I then checkout another orphan to do the same thing?

-Martin

Signature · 2 lines
Employee of Qualcomm Innovation Center, Inc. which is a 
member of Code Aurora Forum
#4 lore raw
Quoted 5 lines · Martin Fick

Actually, no I can't. I can check out some other branch (assuming I have one), but I cannot then delete a, it appears to already be deleted by virtue of checking out another branch. I like that since I never checked it in, better to clean up the garbage.

Good.

Quoted 2 lines

...but why can't I then
checkout another orphan to do the same thing?

I am not surprised if the original contributor who wanted to add --orphan did not address corner cases. It is very plausible that we did not try as hard to nitpick the code for complete support of such corner cases as I and other contributors usually do for more important features.

So... Patches welcome ;-)

Having said that, there are many things to consider to fill the corner case you seem to be interested to add support for.

The "orphaned" state is like immediately after "git init". Because you do not have any current commit, you cannot create an orphan branch based the state immediately after "git init", either. You are nominally on your 'master' branch, but it does not have anything yet; you are expected to turn it into a real branch by creating a commit soon, but until you do so, you are kind of in-limbo. It is understandable that there will be many operations that will not make any sense until you first get out of this in-limbo state. For example, you cannot (and do not have to) delete the branch and if you have a commit (e.g. you can fetch one from another place) you can check it out and the 'master' will be gone, because you never created it in the first place.