Bash Shortcut for Git Squash

June 25, 2020

cover-image-for-git-squash

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.

This post originally appeared on Dev.


Profile picture

Written by Ayan Banerjee who is a Software Developer. You should follow them on Twitter

© 2018 - 2022, Built with Gatsby