#!/bin/sh set -eu usage() { cat <<-'EOF' Usage: git cleanup [REMOTE] git cleanup -h EOF } help() { cat <<-'EOF' Options: -h, --help show this message REMOTE the remote to prune the remote tracking branches from (default: origin) Delete merged branches, both local and remote-tracking. Examples: Cleanup branches from "origin": $ git cleanup Delete branches from "upstream": $ git cleanup upstream EOF } for flag in "$@"; do case "$flag" in (--) break ;; (--help) usage help exit ;; (*) ;; esac done while getopts 'h' flag; do case "$flag" in (h) usage help exit ;; (*) usage >&2 exit 2 ;; esac done shift $((OPTIND - 1)) REMOTE="${1:-origin}" git branch --merged | grep -v -e '^\*' -e '^. main$' | xargs git branch -d git remote prune "$REMOTE"