Collapsing a Group of Commits into One on Git

Assuming you don’t care about retaining any of your existing commit messages, there’s a nifty (and fast) git recipe you can use. First, make sure your branch is checked out:

git checkout <branch-to-squash>

For safety, lets tag the current commit.

git tag my-branch-backup

Next, move the branch HEAD back to your last good commit (without modifying the workspace or index). EDIT: The last good commit is the most recent commit on your branch that you want to retain.

git reset --soft <last-good-commit>

Using git status, you’ll notice that all changes on your feature branch are now staged. All that’s left to do is …

git commit

This method is great for consolidating long, convoluted git histories and gnarly merges. Plus, there’s no merge/rebase conflicts to resolve!

Now, if you need to retain any of your existing commit messages or do anything fancier than the above allows, you’ll want to use git rebase --interactive.

Solution derived from: http://makandracards.com/makandra/527-squash-several-git-commits-into-a-single-commit

Reference: http://git-scm.com/docs/git-reset

Reference: http://git-scm.com/docs/git-rebase

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)