RE: Seemingly inconsistent checkout behaviour

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Oct 11 2022, Ævar Arnfjörð Bjarmason wrote:

>On Tue, Oct 11 2022, Bart Kuster wrote:
>
>> Dear People of Git,
>>
>> I had some trouble getting out of a detached HEAD state using git checkout. I’ve solved it now but the behaviour of checkout when doing so leaves me a bit puzzled.
>>
>> I’d expect the behaviour of the commands below to be equivalent:
>>
>>    git checkout origin/main
>>
>> vs
>>
>>    git config checkout.defaultRemote origin
>>    git checkout main
>>
>> But they are not; the former leaves the HEAD detached while the latter 
>> sets it to main. I failed to find an explanation in the git-checkout 
>> documentation, which seems to indicate that checkout always updates 
>> HEAD.
>
>They're not equivalent, the documentation that describes it is the discussion of the --guess option.
>
>I.e. these are equivalent:
>
>	git checkout main
>	git checkout --guess main
>
>And the latter of those resolves to (in this case):
>
>	git checkout -b main -t origin/main
>
>The "in this case" being that it's actually (pseudocode):
>
>	git checkout -b main -t $(find-the-only-remote-that-has-a-branch-named main)/main
>
>And the "checkout.defaultRemote=origin" is a setting that disambiguates that "find the only" down to "origin", if you happen to have multiple such remotes.
>
>But I'm still unclear on the "I had some trouble getting out of a detached HEAD state using git checkout" part of your question, isn't the:
>
>	git config checkout.defaultRemote origin
>	git checkout main
>
>Exactly what you want then?
>
>If you're trying to get a "non-detached remote tracking branch", i.e. to have this somehow checkout a branch:
>
>	git checkout origin/main
>
>Then there's no such thing. We treat them specially, and don't allow you to check them out as a normal branch, so when you do so you end up with a detached HEAD pointing to wherever that branch points to. IOW:
>
>	git checkout origin/main
>
>Is always the same as:
>
>	git checkout origin/main^{}
>
>Given that you have an "origin" remote, a "main" branch, it's not ambiguous, or the right config blah blah.
>
>That's also documented somewhere, but I didn't dig up where that is...
>

Thanks for your quick reply! I understand the situation now.

What put me on the wrong track, is that git checkout <remote>/<branch> is not explicitly discussed in the git-checkout documentation, leading me to believe the default use case would apply to it while it does not. The last part of your explanation clarifies what's really going on. Thanks!




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux