Skip to content

Instantly share code, notes, and snippets.

@digitaljhelms
Created July 12, 2012 15:58
Show Gist options
  • Star 44 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • 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
@cpicanco
Copy link

cpicanco commented Oct 4, 2016

Excelent, thank you for this!

@georgegillams
Copy link

๐Ÿ™‡โ€โ™‚๏ธ

@rnmulchandani
Copy link

Superb ๐Ÿ‘

@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@address.com>" --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

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