Subject: RE: switch requires --detach [[Re: What actually is a branch]]

From: "Randall S. Becker" <[email-masked]>
Date: Fri, 9 Jul 2021 12:38:13 -0400

On July 9, 2021 12:21 PM, Felipe Contreras wrote:
>Martin wrote:
>>
>> On 09/07/2021 17:08, Felipe Contreras wrote:
>> > and the fact that
>> > `git switch` expects branches is one of the things that bothers me
>> > about it.
>>
>> Ah, good point.
>>
>> I would word it differently though.
>> "git switch forces the use of --detach if switching to a non branch"
>>
>> Bit of a twist.
>> It's a nice safety for beginners. I remember when I started, I kept
>> ending up detached. And I had no idea what to do next.
>
>Yes, and that's a good thing, but there's no need to cripple advaned users.
>
>> But once you are a bit more experienced the need to add that option
>> can be bothersome.
>> It's not common in my workflow, but I can see that it can be an issue.
>>
>> So how to remedy?
>>
>> - Drop the option / Make it default?
>
>No. As you noted it has value for beginners.
>
>> - add --allow-detach  and git config switch.detach allow ?
>
>That's a good option, but another one would be to have a core.advanced mode, you turn it on if you are an advanced user.
>
>> I don't really have a preference.
>>
>> I think its a nice protection, but even without it, the warning on
>> entering detached HEAD state is pretty good.
>
>That warning olny appears with `git checkout`, not with `git switch --detach`.
>
>> There is also a curious side effect.
>>
>> If you went into detached, you can go back to attached using
>>    git switch -
>>
>> but not back to detached by again doing
>>    git switch -
>>
>> Even though you had been there, and that means you had used
>> --detached, and therefore known what you did.
>
>That's definitely a bug.

In all of this discussion, please be aware that many CI/CD systems use sparse checkout and detached heads as a matter of efficiency and certainty. Please ensure that you are not changing the semantics of existing capabilities when restricting what `git switch` will do. I am concerned about the 280,342 (as of this minute) current Jenkins users who depend on this.

Thanks,
Randall