cleanup_git_branches

remove unused git branches with one command

Usage | Installation | Annotated source | License

KLP

Usage

Simply launch the following command in a git repo

cleanup_git_branches

Installation

Both zsh and bash shell are supported.

Just copy and paste the cleanup_git_branches function below in your shell profile or (assuming you are using zsh) do something like

mkdir -p ~/.shell
cd ~/.shell
git clone https://github.com/fibo/cleanup_git_branches.git
echo "source ~/.shell/cleanup_git_branches/fun.sh" >> ~/.zshrc

With the setup above, to update run the following

cd ~/.shell/cleanup_git_branches
git pull origin main
source ~/.zshrc
cd -

Annotated source

To generate sources, enter this repo folder and run make.

Create a cleanup_git_branches function

cleanup_git_branches() {

Get current working branch and repo default branch.

  WORKING_BRANCH=`git rev-parse --abbrev-ref HEAD`
  DEFAULT_BRANCH=`basename $(git symbolic-ref refs/remotes/origin/HEAD)`

Go to default branch.

  if [ "$DEFAULT_BRANCH" != "$WORKING_BRANCH" ]; then
    git switch $DEFAULT_BRANCH
  fi

Remove local branches (excluding main branch) that are already merged.

  git branch --merged | grep -v $DEFAULT_BRANCH | while read branch
  	do
  		git branch -d $branch
  	done

Remove local branches with no remote reference.

  git fetch -p
  for BRANCH_NAME in $(git branch -v | grep '\[gone\]' | awk '{print $1}')
  	do
  		git branch -D $BRANCH_NAME
  	done

Back to previous branch.

  if [ "$DEFAULT_BRANCH" != "$WORKING_BRANCH" ]; then
    git switch $WORKING_BRANCH
  fi
}

Tip

If you need to change default branch, once done remotly (for instance on GitHub), you need to update your local repository. Assuming the new default branch is main, launch

git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main

License

MIT