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).
@Jont828
$(git merge-base ${1:-main} $(git branch --show-current))is probably nicer than$(gl --oneline $(git symbolic-ref --short HEAD) ^${1:-main} | wc -l)