Skip to content

Instantly share code, notes, and snippets.

@digitaljhelms
Created July 12, 2012 15:58
Show Gist options
  • Save digitaljhelms/3099010 to your computer and use it in GitHub Desktop.
Save digitaljhelms/3099010 to your computer and use it in GitHub Desktop.
Squash the first two commits in a git repository's history

The scenario

Your repository has two commits:

$ git log --oneline
957fbfb No, I am your father.
9bb71ff A long time ago in a galaxy far, far away....

Use the interactive rebase tool to squash the two commits:

$ git rebase -i 9bb71ff

When your editor opens, only a single commit is listed:

pick 957fbfb No, I am your father.

You change pick to squash, save & close your editor.

The problem

Git complains...

Cannot 'squash' without a previous commit

The fix

$ git rebase -i 9bb71ff

This time, when your editor opens, change pick to edit instead of squash, save & close your editor.

$ git reset --soft HEAD^
$ git commit --amend

Your editor again so that you can modify the commit message of the soon-to-be squashed commit; make your changes, save & close the editor.

$ git rebase --continue
@a-andreyev
Copy link

Thanks! In case of an issue with zsh: zsh: no matches found: HEAD^, don't forget to escape the ^ symbol with \:

git reset --soft HEAD\^`

@dax-er
Copy link

dax-er commented Feb 15, 2024

You can also use HEAD~1 if HEAD^ doesnt work

@frenzymind
Copy link

I just do it simpler:

git rebase -i HEAD~N , where N - commits count in your branch (including first one)

and then do any operations you usually do in interactive mode

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment