Thread (1 message) 1 message, 1 author, 2024-09-03

Re: `git rebase (--no-fork-point) --onto=<newbase> [<upstream> [<branch>]]` leaves HEAD detached and *HEAD not moved when <branch> is exactly `HEAD`

From: Junio C Hamano <hidden>
Date: 2024-09-03 15:38:37

Phillip Wood [off-list ref] writes:
quoted
I have a mild suspicion that the "rebase" command might have changed
its behaviour since the days back when it was implemented as a shell
script, when the "what to rebase" argument is HEAD, as the most
natural implementation to do this "optionally first switch to it
when the argument is given" in the scripted Porcelain is to actually
run "git checkout HEAD", which should be a somewhat noisy no-op.j
It appears to have changed in 0cb06644a5 (rebase [--onto O] A B: omit
needless checkout, 2008-03-15). That also changed the reflog messages
written by "git rebase <upstream> <branch>" so that "git checkout
@{n}" does not see the new branch being checked out.
Thanks for digging.  Even if we now know that it was a regression in
the early times of the current code, it is way too old to change it
now.

Unless we want to do so at a major version bump, but I do not know
if this is big enough to worth writing a release note entry for.
Users who do want to run a trial rebase of the current branch on a
detached HEAD have all been already using HEAD^0 as the <branch>
argument and they have been fine without complaints.

Making it consistent in the opposite direction by changinging "git
checkout HEAD" to detach HEAD is unthinkable.  So what we have is
fine, I would think.

Thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help