Re: bug?: ORIG_HEAD incorrect after reset during git-rebase -i
From: Philippe Blain <hidden>
Date: 2023-01-05 00:14:04
Hi Phillip and Erik, Le 2021-12-16 à 11:44, Erik Cervin Edin a écrit :
Hi Phillip, Yes, I know. It's just that I was under the impression ORIG_HEAD was to be reverted to .git/rebase-merge/orig-head at the finish of the rebase. Personally, it's the behavior I would expect. Thanks for the tips.
I just hit the same bug (I think it qualifies as one). In fact git-rebase(1) explicitely mentions that ORIG_HEAD is set to the branch tip before the rebase starts: $ git grep -C2 ORIG_HEAD Documentation/git-rebase.txt Documentation/git-rebase.txt-36-The current branch is reset to `<upstream>` or `<newbase>` if the Documentation/git-rebase.txt-37-`--onto` option was supplied. This has the exact same effect as Documentation/git-rebase.txt:38:50:`git reset --hard <upstream>` (or `<newbase>`). `ORIG_HEAD` is set Documentation/git-rebase.txt-39-to point at the tip of the branch before the reset. Documentation/git-rebase.txt-40- Here is my runnable reproducer. It is slightly more complicated than Erik's, since I split the second commit in two, but this is not necessary to trigger the bug; just running 'git reset HEAD^' as Erik wrote is enough.
#!/bin/bash
rm -rf repro
git init repro
(
cd repro
# Create 3 commits
cat << EOF >test
hello
every
one
EOF
git add test
git commit -m initial
cat << EOF >test
hello
add new lines
every
and also here
one
EOF
git commit -am second
cat << EOF >test
hello
add new lines
every
and also here
one
still more changes
EOF
git commit -am third
# Rebase to split the second commit
GIT_SEQUENCE_EDITOR="sed -ie '1 s/^p /e /'" git rebase -i HEAD~2
git reset HEAD^
cat << EOF >test
hello
add new lines
every
one
EOF
git ci -am "second 1/2"
cat <<EOF >test
hello
add new lines
every
and also here
one
EOF
git ci -am "second 2/2"
# Finish rebase and demonstrate bug
git rebase --continue
echo ---
echo "@{1} is :"
git log -1 @{1}
echo "ORIG_HEAD is :"
git log -1 ORIG_HEAD
)
Cheers, Philippe.