Skip to content

Git Fixbase

Posted on:August 18, 2023 at 01:00 PM

I always used to find myself needing to edit/amend commits that I made a few commits ago. I would handle this scenario by making the changes I wanted, stage them, then create a !fixup commit (git commit --fixup <commit-hash>) for the commit I was planning to edit. Provided I had no other changes in my index, I would then interactively rebase from the commit before the one I am fixing up. I did this a lot. It was pretty much muscle memory I did it so much.

One day I set out to create a git alias to perform these operations all in one go. Initially I thought I would need to create a small shell script and invoke it with a git alias, but it turns out you can include plain bash in a git alias by prefixing the alias with !.

Introducing git fixbase <hash-to-fixup>:

[alias]
        fixbase = "!f() { git commit --fixup=$1 && GIT_EDITOR=true git rebase --interactive --autosquash $1^; }; f"

The GIT_EDITOR=true is the key to the command - it will prevent git from opening your configured text editor and automatically accept the interactive rebase without your input. Perfect!