Sometimes you make a git commit, but there's a typo or syntax error in there by accident. I normally use
git rebase -i HEAD~2
and then through the magic of vim I'm fairly productive at squashing the two commits together.
But wouldn't it be nice if there was a way to run one command to squash your most recent commit (which probably has a useless message like "typo" anyway) into the next most recent? Lucky for you, there is now!
#!/bin/bash # # Devin Howard 2015 # squash-last-commit.sh # # Squashes your most recent commit into the next most recent, erasing its message from the log # Example usage: # $ vim # make a small fix, like a typo or a syntax error # $ git add . # $ git commit -m "blah typo squash me" # $ git log HEAD~2..HEAD # # commit 4c31808f959b4d2c36601ab2fa2ccbb3b7863477 # Author: Devin Howard <devin@callysto.com> # Date: Thu Dec 17 11:21:20 2015 +0800 # # blah typo squash me # # commit e90ac5d3b2c3c60bf6ba9f8bd6b69577f1a95243 # Author: Devin Howard <devin@callysto.com> # Date: Thu Dec 17 11:21:10 2015 +0800 # # really great new feature # # $ squash-last-commit.sh # $ git log HEAD~2..HEAD # # commit e90ac5d3b2c3c60bf6ba9f8bd6b69577f1a95243 # Author: Devin Howard <devin@callysto.com> # Date: Thu Dec 17 11:21:10 2015 +0800 # # really great new feature # # commit e90ac5d3b2c3c60bf6ba9f8bd6b69577f1a95243 # Author: John Johnsterson <john@johnsterson.com> # Date: Thu Dec 10 09:17:00 2015 +0800 # # update code for latest cool feature # if [[ "$1" == "--commit" || "$1" == "-c" ]]; then git add -A . git commit -m "squashit" fi export GIT_EDITOR=ed cat << EOF | git rebase -i HEAD~2 2s/^pick/fixup/ wq EOF