From This other answer on the same thread
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
).
I reworked this a bit so it automatically figures out how many commits it's ahead of main (or whatever branch you specify) and takes the first commit message in the PR.