#!/bin/sh
set -eu
    
usage () {
    cat <<'EOF'
usage: git merged [-uh] [<branch>]

Shows what local branches have been merged into branch (defaults to main branch).

Options:
-u    Show unmerged branches instead of merged branches
-h    Show this help
EOF
}

unmerged=0
while getopts uh flag; do
    case "$flag" in
        u) unmerged=1;;
        h) usage; exit 0;;
    esac
done
shift $(($OPTIND - 1))

if [ $unmerged -eq 1 ]; then
    opts="--no-merged"
else
    opts="--merged"
fi

if [ $# -gt 0 ]; then
    base="$1"
    shift 1
else
    base="$(git main-branch)"
fi

git branch $opts "$base" | cut -c3- | grep -vxF "$base"
