Cover photo by Moritz Kindler on Unsplash
I often find myself squashing a lot of unnecessary commits. The usual way to do this is by using rebase
or soft reset
. I personally prefer to use the soft reset
method.
# soft reset some commits git reset --soft HEAD~2 git commit -m "Commit message"
As you can see the process is rather long. So how we can save some precious seconds ... enter bash functions!
Add this function to your .bashrc
file:
function sq { if [ -z "$1" ] then echo "First argument required" return 1 fi if [ -z "$2" ] then message="$(git log --pretty=format:"%B" -1)" else message=$2 fi git reset --soft HEAD~$1 git commit -m "$message" }
And then run source ~/.bashrc
.
Usage
If you want to squash 2
commits with the commit message Add tests
, run this: sq 2 "Add tests"
.
More often than not we want the commit message of the squashed commit to be the same as the recent most commit message. In those cases, simply run sq 2
if you want to squash 2 commits.
Sometimes we need to squash all the commits that we made after branching off from a branch. For that, add the following function to your .bashrc
file:
function cnt { compare_branch=${1-master} git rev-list --count HEAD ^$compare_branch }
This gives the number of commits made after branching off. Try running cnt
for the number of commits made after branching off from master
and cnt my_branch
for the number of commits made after branching off from my_branch
. Don't forget to run source ~/.bashrc
after modifying .bashrc
!
Now simply run sq "$(cnt my_branch)"
to squash the commits made after branching off from my_branch
with the recent-most commit message.
I hope that you have learned something useful from this post and save some seconds of your development time! Let me know if something is not clear.
Top comments (0)