Git - Automatic Squash
Hello!
Everyone has, at one point or another, committed something like: X thing fixed
, Little fixes
, or More fixes
while developing a feature. These messages don't have much meaning in and of themselves, but were most likely part of a branch named new-feature
, with a history that looks something like this:
16f612a Last fix
14f9f9a More fixes
16f989a Feature A
If Feature A were finished, we'd merge the new-feature
branch to master
. The last two messages are now in the history of master
, but by themselves, they lack meaning.
To avoid this, I started to use the option --fixup when committing, like this:
git commit -— fixup <commit_hash>
This command automatically marks the commit as a fix of the commit with hash commit_hash
, so the new commit will have the message: fixup! Feature A
. Instead of having the messages More fixes
and Last fix
, we're going to have this:
16f612a fixup! Feature A
14f9f9a fixup! Feature A
16f989a Feature A
Yes, I know what you're thinking, but we're not going to merge these commits to master
.
Before merging to master
, we're going to rebase this branch with the --autosquash option
git rebase -i --autosquash HEAD~2
You'll see something like this in your editor of choice:
pick 16f989a Feature A
fixup 14f9f9a fixup! Feature A
fixup 16f612a fixup! Feature A
This command will squash our three fixups
commits into one — in this case — into a new commit with the message Feature A
.
After the running the rebase, our history will be:
16f989a Feature A
Now our branch is ready to be merged into master
without irrelevant messages.
I hope that this command makes your workflow easier.
Cheers!