On Wed, Aug 17, 2022 at 4:54 AM Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> wrote: > after: ... > running > > git rebase -i --autosquash @~2 > > my editor presents me with: > > pick ef8f0bd27a56 fixup! file with content > pick b40a214bf5fb fixup! fixup! file with content > > However I would have expected > > pick ef8f0bd27a56 fixup! file with content > fixup b40a214bf5fb fixup! fixup! file with content > > instead. > > Is this a feature I don't understand? The problem is the code removes all "fixup! " prefixes and then tries to find a commit with that title, which isn't in the list. If you specify the commit hash, then it finds it and it works as you intended. I don't see why the code would do that though, since you are clearly intending to fix "fixup! file with content", not "file with content". This patch below (apologies for gmail auto wrapping in advance) should make it work as you intend. --- a/sequencer.c +++ b/sequencer.c @@ -6213,12 +6213,8 @@ int todo_list_rearrange_squash(struct todo_list *todo_list) if (skip_fixupish(subject, &p)) { struct commit *commit2; - for (;;) { - while (isspace(*p)) - p++; - if (!skip_fixupish(p, &p)) - break; - } + while (isspace(*p)) + p++; entry = hashmap_get_entry_from_hash(&subject2item, strhash(p), p, -- Felipe Contreras