threads / discuss / 50649

is "git rebase ... [branch]" equivalent to first "git checkout [branch]"?

Subject: is "git rebase ... [branch]" equivalent to first "git checkout [branch]"?

## tl;dr

2 messages between Mar 4, 2019 and Mar 4, 2019.

replies: 1people: 2as markdown or json

Robert P. J. Day· Mar 4, 2019, 20:41 UTC · lore
  i *think* i know the answer to this based on man page and reading
the code, but i just want to verify that i'm not missing any subtlety.
  according to "man git-rebase":
   git rebase [-i | --interactive] [<options>] [--exec <cmd>]
       [--onto <newbase>]
       [<upstream> [<branch>]]
and:
  "If <branch> is specified, git rebase will perform an automatic git
checkout <branch> before doing anything else. Otherwise it remains on
the current branch."
  is it *absolutely* equivalent to either specify the final "[branch]"
argument on "git rebase", or to just "git checkout branch" first
before running the rebase, then leaving off that final argument?
  everything i've seen suggests those two things are identical, but
i've been fooled before.
rday
-- 
========================================================================
Robert P. J. Day                                 Ottawa, Ontario, CANADA
                  http://crashcourse.ca/dokuwiki

Twitter:                                       http://twitter.com/rpjday
LinkedIn:                               http://ca.linkedin.com/in/rpjday
========================================================================
Junio C Hamano· Mar 4, 2019, 22:54 UTC · re: Robert P. J. Day · lore

Re: is "git rebase ... [branch]" equivalent to first "git checkout [branch]"?

"Robert P. J. Day" <rpjday@crashcourse.ca> writes:
Show 6 quoted lines
>   i *think* i know the answer to this based on man page and reading
> the code, but i just want to verify that i'm not missing any subtlety.
> ...
>   "If <branch> is specified, git rebase will perform an automatic git
> checkout <branch> before doing anything else. Otherwise it remains on
> the current branch."
Yes, but with a caveat ;-)

At least, the original scripted version of "git rebase" both designed and implemented the final extra "rebase this one, not the current branch" argument as a pure short-hand for lazy people (like me, who wanted to have such a feature and made it so) to be exact equivalent to "checkout before doing anything else". Which means that HEAD@{} reflog would record such an event as "checkout that switched to the branch", and it would have affected the computation needed if you said "git checkout @{-1}" after the rebase finished.

I do not offhand know if the current verison of "git rebase" that was reimplemented in C changed the behaviour, though.

← back to recent threads