Skip to content

Instantly share code, notes, and snippets.

@dsvoronin
Created November 9, 2022 22:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dsvoronin/56ce354bc8e1bbc6646102fa0b812a70 to your computer and use it in GitHub Desktop.
Save dsvoronin/56ce354bc8e1bbc6646102fa0b812a70 to your computer and use it in GitHub Desktop.
Clear stale branches script
#!/usr/bin/env bash
set -e
SYNC_BRANCH="master"
CURRENT_BRANCH=$(git branch --show-current)
if [ "$SYNC_BRANCH" != "$CURRENT_BRANCH" ]; then
echo "ERROR: You should be on '$SYNC_BRANCH' branch to continue"
exit 1
fi
if [ "$1" = "--delete" ]; then
git branch -r --merged | grep --invert-match $SYNC_BRANCH | grep origin | sed 's/origin\///' | xargs -n 1 git push --delete origin
git branch --merged | grep --extended-regexp --invert-match "(^\*|$SYNC_BRANCH)" | xargs -n 1 git branch --delete
else
echo "Deleting merged remote branches. Protected branch is '$SYNC_BRANCH'. This branches will be deleted. Does it look correct?. If so, rerun script with --delete"
echo "Remote:"
git branch -r --merged | grep --invert-match $SYNC_BRANCH | grep origin | sed 's/origin\///' | xargs -n 1 printf "%s "
#git branch -r --merged | grep -v master | sed 's/origin\///' | xargs -n 1 git push --delete origin
printf "\nLocally:\n"
git branch --merged | grep --extended-regexp --invert-match "(^\*|$SYNC_BRANCH)" | xargs -n 1 printf "%s "
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment