Feature-squash-rebase Flow

May 02, 2011

I have a new favorite flow in git. I call it feature-squash-rebase. It's used for taking a feature branch, and applying all it's changes in one commit onto the master HEAD.

It goes something like this. First, branch out for the new feature:

git checkout -b feature

Hack away. Commit frequently. Once you're done, return to master:

git checkout master

Now the magic begins. First, merge the feature branch onto master by using the squash flag, this will meld all the commits into one giant commit:

git merge --squash feature

Now you can review the huge diff, and commit when ready:

git commit -m "new feature"

And once you got that down, reapply your commit onto the master HEAD by using pull with the rebase flag:

git pull --rebase

That's it. Push your changes to the rest of the team.

git push

This flow is not necessary, but it keeps the history super-clean. I don't use this for heavy features that I want to keep track of. But for short stuff, this flow is a keeper.