Skip to main content
2 of 7
added 24 characters in body
EthanB
  • 4.3k
  • 1
  • 28
  • 47

Based on Chris Johnsen's answer:

I added this line to the [alias] section of my git config file (~/.gitconfig):

squash = "!f(){ git reset --soft HEAD~${1} && git commit --edit -m\"$(git log --format=%B --reverse HEAD..HEAD@{1})\"; };f"

Usage:
git squash N

... Which automatically squashes together the last N commits, inclusive.




My previous solution was this `[alias]`:
squash = "!f(){ git rebase -i HEAD~${1}; }; f"

... which has the same usage, but requires you to edit the "git-rebase-todo" file (and change pick to squash).

EthanB
  • 4.3k
  • 1
  • 28
  • 47