shell-scripts/git_tidy_local_branches.sh
2025-12-28 13:23:44 -06:00

32 lines
1,007 B
Bash
Executable file

#!/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:"
echo "$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).