Skip to content

Instantly share code, notes, and snippets.

@brandonb927
Forked from rgrove/delete-tags.sh
Last active February 22, 2022 01:27
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save brandonb927/04c814ec1f13220005be to your computer and use it in GitHub Desktop.
Save brandonb927/04c814ec1f13220005be to your computer and use it in GitHub Desktop.
#!/bin/bash
# This script will delete *all* local and remote tags from any git repo you run
# it in, unless they are a major branch, or the most previous minor branches.
# If 1.4.3 is the latest patch/hotfix branch, all 1.*.* branchs will be deleted,
# but all major/minor releases will be left
#
# This script will not delete branches; just tags.
set -e
REMOTE='origin'
# Verify that the remote is actually GitHub.
if [ `git remote show $REMOTE | grep github.com | wc -l` == "0" ]; then
echo "The '$REMOTE' remote doesn't appear to be GitHub. Please edit"
echo "this script and set the REMOTE variable at the top to the name of"
echo "your git remote that points to GitHub."
echo
exit 1
fi
echo "--> Cleaning up tags"
# First, delete all old local tags.
git tag -d `git tag | grep -E "^(?:(\d+)\.)?(?:(\d+)\.)?(\d+)$" | xargs`
# Now fetch all remote tags so we'll know which ones to delete.
git fetch --tags $REMOTE
tags=`git tag | grep -E "^(?:(\d+)\.)?(?:(\d+)\.)?(\d+)$" | xargs`
# Delete all old remote tags.
if [ "$tags" != "" ]; then
git push -v --delete $REMOTE $tags
fi
# Re-delete all old local tags.
git tag -d $tags
echo "--> Done"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment