With git it’s possible to squash previous commits into one before sharing them with others.
For example you want to squash your last 3 commits:
git rebase -i HEAD~3
On the other hand, if you want to just simply squash all the unpushed commits:
git rebase -i origin/master
If you have many commits and want to start from a certain commit:
git rebase -i
Any of the command above will prompt open your editor with something like:
This will show up in your editor:
Note: If you don’t have an editor defined in your config, you will encounter
Could not execute editor. Just do
git config --global core.editor /usr/bin/vim for you to be able to proceed.
Next, we can configure git on what to do with the commits. Let’s say, I want to keep commit a92f09. Git squash-ing the following two commits into the first one will leave us with one single commit with all the commits in it. To do that, change your file to this:
Save and exit.
That’s it. Git squash is especially useful if you want to wrap up “all in a day’s work” or if you want to have a clean and concise git history.
git rebase -i origin/master and replace “pick” on the second and succeeding commits with “squash”.