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)