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
@p-m-m-c
Copy link

p-m-m-c commented Jan 15, 2019

Thanks! Short explanation on the internals of this operation? ๐Ÿ˜

@nineSean
Copy link

the simplest way is git reset --soft head^ then git commit --amend without using git rebase

@m1koop
Copy link

m1koop commented Jun 13, 2019

Thanks very much for this... will bookmark this link for sure.

@akhan3
Copy link

akhan3 commented Jun 26, 2020

๐Ÿ‘

@a37h
Copy link

a37h commented Nov 4, 2020

@nineSean thanks

@digitaljhelms
Copy link
Author

@nineSean ๐Ÿ‘ ๐Ÿ’ฏ

@Amoong
Copy link

Amoong commented Feb 25, 2021

๐Ÿ˜

@ethfun
Copy link

ethfun commented Jul 15, 2021

the simplest way is git reset --soft head^ then git commit --amend without using git rebase

๐Ÿ‘

for anyone just want to modify commit Author, then you can do
git reset --soft head^
git commit --amend --author="Author Name <[email protected]>" --no-edit

@seandenigris
Copy link

Awesome! Thanks :)

@johnrichardrinehart
Copy link

Thanks!

@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