- In a git repository, create a new file with the content "Mario" and commit the change:
echo "Mario" > new_file
git add new_file
git commit -m "New file"
- Make a change to the content of the file you just created so it becomes "Mario & Luigi," then create another commit:
echo "Mario & Luigi" > new_file
git commit -a -m "Added Luigi"
- Verify you have two separate commits by running:
git log
- Squash the two commits you've created into one commit:
git rebase -i HEAD~2
You should see something similar to:
pick 5412076 New file
pick 4016808 Added Luigi
Change pick
to squash
:
pick 5412076 New file
squash 4016808 Added Luigi
Save it and provide a commit message for the squashed commit.
Note: If running
git rebase -i HEAD~2
returns a fatal error (e.g., "invalid upstream 'HEAD~2'"), that usually means your second commit is actually the root commit and there's no valid parent before it. In that case, you can either:
- Use
git rebase -i --root
to allow rewriting the root commit, or- Create an initial commit before these two commits so that
HEAD~2
points to valid commits.
Answer the following:
-
What is the reason for squashing commits?
History becomes cleaner and it's easier to track changes without many small commits like "removed a character," for example. -
Is it possible to squash more than 2 commits?
Yes.