With git it’s possible to squash previous commits into one before sharing them with others.
Step 1
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.
Step 2
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.
TL;DR
Use git rebase -i origin/master
and replace “pick” on the second and succeeding commits with “squash”.
4 comments for “Git: Squash Commits”