From f61d8e0846c7d205fbfa030ed2515f5cfb364790 Mon Sep 17 00:00:00 2001 From: Tracey Clark Date: Wed, 15 Nov 2023 17:44:08 -0600 Subject: [PATCH] Initial commit of git branch cleaner --- git_tidy_local_branches.sh | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100755 git_tidy_local_branches.sh diff --git a/git_tidy_local_branches.sh b/git_tidy_local_branches.sh new file mode 100755 index 0000000..e578f8f --- /dev/null +++ b/git_tidy_local_branches.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +# first we prune origin to ensure our local list of remote branches is up to date +git remote prune origin + +GONE_BRANCHES=$(git branch -vv | grep 'origin/.*: gone]' | awk '{print $1}') +echo "[DEBUG]: $GONE_BRANCHES" + +if [ -z "$GONE_BRANCHES" ]; then + echo "Could not find any local branches where the remote is gone" + exit 0 +fi + +if [ "$1" = "-f" ]; then + echo "$GONE_BRANCHES" | xargs git branch -D +#TODO: Do this in a loop so that we can provide output on which branches failed to delete +else + echo "$GONE_BRANCHES" | xargs git branch -d + if [ $? -ne 0 ]; then + FAILED_TO_DELETE="true" + fi +fi + +if [ "$FAILED_TO_DELETE" = "true" ]; then +# echo "error: Some local branches are not fully merged." + echo + echo "If you are sure you want to delete all branches above, run 'git-glean -f'" +fi + +# Handy script when following GitFlow and rebasing, since `git branch --merged master` will never list +# a rebased but merged branch (as their commit history differs).