Subject: Re: [rebase] `fatal: cannot force update the branch ... checkout out at ...` is confusing when it isn't active

From: Junio C Hamano <[email-masked]>
Date: Wed, 12 Jul 2023 13:49:47 -0700

Josh Soref <[email-masked]> writes:

> Josh Soref writes:
>> fatal: cannot force update the branch 'main' checked out at
>> '/private/var/folders/r3/n29fz25x72x191fdv6mhhr3m0000gp/T/tmp.fGD64HAf'
>
>> It's true git in the repository does have a pin of sorts for the
>> `main` branch and that `git-rebase` would be very upset if the
>> branch's location were changed, but as an end user, the `main` branch
>> is not checked out, the `next` branch is checked out.
>
> Junio C Hamano wrote:
>> Fair enough.  Perhaps "cannot force update the branch 'main' in use"
>> would alleviate the confusion?
>
> That would be better.
>
> Even better would be to tell me what's using it (rebase). I'm not sure
> how possible that is.

When branch.c:prepare_checked_out() notices which branch is in use
in what way in which worktree, it does check many conditions (e.g.
"in this worktree, is a rebase in progress and if so which branch is
being affected?") but the information is lost there to only record a
mapping from branch names to worktree location.  So "it is in use
over there" with exact location is given, but "how it is used" is
not recorded.

It shouldn't be a rocket surgery to teach the function to leave that
information, but I am not offhand sure how valuable it would be to
do so.  After all, once you learn which worktree of yours is using
the branch you wanted to touch, you'll either know already or it
would be easy for you to find out what you have been doing in that
other worktree anyway, no?