git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: ORIG_HEAD after rebase is confusing

From
PWPhillip Wood <phillip.wood123@gmail.com>
Date
Oct 26, 2020, 10:43 UTC
Message-ID
<8bb82be6-dc51-6602-47b5-c849a87ae55e@gmail.com>
In-Reply-To
<CAFzd1+62PmHBoVpMw-y4TC=bmc8N0wDpF2jQa7XGz2e+7Dos6A@mail.gmail.com>
Hi Caspar
On 22/10/2020 21:31, herr.kaste wrote:
Show 41 quoted lines
> Reading the git rebase manual and some answer on stackoverflow I assumed
> `ORIG_HEAD` will point to the original HEAD, the tip of the branch *before*
> I started rebasing.  But it doesn't seem so.
> 
> For example, I have this:
> 
> 
>    $ git log --graph --all --oneline
>    * 9830f9f (master) X
>    | * fb7b6a6 (HEAD -> feature) D
>    | * 46b7a7a C
>    | * da5e4c7 B
>    | * 5c135da A
>    |/
>    * 6848823 Init
> 
>    $ git rebase master
>    Successfully rebased and updated refs/heads/feature.
> 
>    $ git rev-parse ORIG_HEAD
>    da5e4c7e9eb3b10c1efa08c534b9c9e4b92d9fd7
> 
>    $ git reflog
>    a647bd7 (HEAD -> feature) HEAD@{0}: rebase (finish): returning to
> refs/heads/feature
>    a647bd7 (HEAD -> feature) HEAD@{1}: rebase (pick): D
>    2f458e8 HEAD@{2}: rebase (pick): C
>    0aa2160 HEAD@{3}: rebase (pick): B
>    b957fc7 HEAD@{4}: rebase (pick): A
>    9830f9f (master) HEAD@{5}: rebase (start): checkout master
>    fb7b6a6 HEAD@{6}: checkout: moving from master to feature
>    9830f9f (master) HEAD@{7}: commit: X
>    6848823 HEAD@{8}: checkout: moving from feature to master
>    fb7b6a6 HEAD@{9}: commit: D
>    46b7a7a HEAD@{10}: commit: C
>    da5e4c7 HEAD@{11}: commit: B
>    5c135da HEAD@{12}: commit: A
>    6848823 HEAD@{13}: checkout: moving from master to feature
>    6848823 HEAD@{14}: commit (initial): Init
> 
> So `ORIG_HEAD` here points to the original B commit.  (I expected the D.)

It should be D, unless you ran `git reset` or `git rebase --skip` while you were rebasing as they also update ORIG_HEAD

Show 10 quoted lines
> Honestly, this doesn't make much sense to me in that I don't know *why* it
> even chooses B which is a middle commit in the chain.  (And from reading the
> source `sequencer.c` I can't deduce it either.)
> 
>    $ git --version
>    git version 2.29.0.windows.1
> 
> What I actually wanted to do was `git reset --hard ORIG_HEAD` fwiw.  And for
> example `git diff HEAD..ORIG_HEAD` to check for unwanted changes after a merge
> conflict.

After you rebase you can user feature@{1} to get the head of feature before rebasing (until you make another commit on feature)

Best Wishes
Phillip
> Regards,
> Caspar Duregger
> 
Previous: herr.kasteNext: herr.kaste
Message 2 of 5 in “ORIG_HEAD after rebase is confusing”
  1. herr.kasteOct 22, 2020
  2. Phillip WoodOct 26, 2020
  3. herr.kasteOct 26, 2020
  4. herr.kasteOct 26, 2020
  5. Phillip WoodOct 26, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.