The old way
When developing features, I'll often use temporary WIP branches to store WIP commits before squashing them into a single feature commit.
To squash the WIP commits, I have always run
git rebase -i HEAD~x, where
x is the number of commits to squash.
x, I run
git log and manually count each commit.
This week I found a simpler way write that command.
A simpler way
It turns out that
HEAD~x is a commit-ish, which refers to the commit
For trunk based development,
HEAD~1 is actually the head of the trunk branch!
Conveniently, this commit can also be referred to by the trunk branch's name.
Put more concisely:
xcommits atop a branch named
developare equivalent commit-ishes.
That means the command
git rebase -i develop can be used instead of
git rebase -i HEAD~x.
Same outcome, less cognitive overhead!
For this blog, the trunk branch is
When implementing the Atom Feed feature, the
atom-feed branch was used to track work in progress.
atom-feed branch contains 4 WIP commits that together comprise the feature.
The goal is to squash these 4 commits into a single commit on develop.
First, to perform the squash I ran
git rebase -i develop to start an interactive rebase:
reword the first commit (to describe the overall feature) and then
fixup to squash the final 3 commits into the first.
The resulting commit (
a55bf81) is our feature commit.
Also, this results in the
atom-feed branch being 1 commit ahead of
Finally, after merging the
atom-feed branch into
develop, the history looks like this: