Re: [BUG] fixup commit is dropped during rebase if subject = branch name
- From
Johannes Altmanninger <aclopte@gmail.com>
- Date
- Sep 17, 2022, 23:19 UTC
- Message-ID
- <YyZWDkZWAkS7q+Wf@gmail.com>
- In-Reply-To
- <CA+JQ7M_Xwxa48ggu88rhA9dG6R3u820Tgu8B2Kg-uMbEVjy3Vg@mail.gmail.com>
On Sat, Sep 17, 2022 at 04:45:17PM +0200, Erik Cervin Edin wrote:
Show 17 quoted lines
> Thank you for filling out a Git bug report! > Please answer the following questions to help us understand your issue. > > What did you do before the bug happened? (Steps to reproduce your issue) > dir=rebase-fixup-subject-equals-branch-name > mkdir $dir > cd $dir > git init --initial-branch=main > git commit -m init --allow-empty > git tag init > > # failure > seq 1 3 >> bar && git add bar && git commit -m main > git tag -f x > seq 4 6 >> bar && git add bar && git commit -m bar > seq 7 9 >> bar && git add bar && git commit --fixup :/main > git -c sequence.editor=: rebase --autosquash --interactive x
Huh, this silently discards the fixup commit, without applying it.
If "foo" is a valid refspec, then the autosquash machinery will apply to it all fixup commits with subject "fixup! foo". The problem you hit is that "foo" points to the fixup commit itself - which is the only destination commit that definitely won't work.
Here is a possible fix:
diff --git a/sequencer.c b/sequencer.c index 79dad522f5..7cbd8c2595 100644 --- a/sequencer.c +++ b/sequencer.c @@ -6231,3 +6231,3 @@ int todo_list_rearrange_squash(struct todo_list *todo_list) (commit2 = - lookup_commit_reference_by_name(p)) && + lookup_commit_reference_by_name(p)) != item->commit && *commit_todo_item_at(&commit_todo, commit2))