#! /bin/sh # This script is used to manage git branches such as delete, update, and rebase # them. It prompts the user to choose the branches and the action they want to # perform. # # For an explanation on the script and tutorial on how to create it, watch: # https://www.youtube.com/watch?v=tnikefEuArQ GIT_COLOR="#f14e32" git_color_text () { gum style --foreground "$GIT_COLOR" "$1" } get_branches () { if [ ${1+x} ]; then gum choose --selected.foreground="$GIT_COLOR" --limit="$1" $(git branch --format="%(refname:short)") else gum choose --selected.foreground="$GIT_COLOR" --no-limit $(git branch --format="%(refname:short)") fi } git rev-parse --git-dir > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "$(git_color_text "!!") Must be run in a $(git_color_text "git") repo" exit 1 fi gum style \ --border normal \ --margin "1" \ --padding "1" \ --border-foreground "$GIT_COLOR" \ "$(git_color_text ' Git') Branch Manager" echo "Choose $(git_color_text 'branches') to operate on:" branches=$(get_branches) echo "" echo "Choose a $(git_color_text "command"):" command=$(gum choose --cursor.foreground="$GIT_COLOR" rebase delete update) echo "" echo $branches | tr " " "\n" | while read -r branch do case $command in rebase) base_branch=$(get_branches 1) git fetch origin git checkout "$branch" git rebase "origin/$base_branch" ;; delete) git branch -D "$branch" ;; update) git checkout "$branch" git pull --ff-only ;; esac done