#!/bin/bash set -euo pipefail source "${HOME}/bin/script_framework.sh" jump_branch="${1:-}" step "Loading required keys to pull" git loadkey step "Fetching data from remote..." for remote in $(git remote -v | awk '{print $1}' | sort | uniq); do step "+++ Remote: '${remote}'" git fetch -p ${remote} --tags done [[ -z ${jump_branch} ]] || { [[ ${jump_branch} != "-d" ]] || { step "Detecting base branch to jump to..." known_bases=($(git branch | grep -Eo '(develop|main|master)$')) [ ${#known_bases[@]} -eq 1 ] || fail "Expected exactly one potential base branch, got ${#known_bases[@]}: ${known_bases[@]}" jump_branch=${known_bases[0]} } step "Switching to branch ${jump_branch}" git switch "${jump_branch}" } step "Rebasing branch / updating submodules..." git pull --rebase && git submodule update --init --recursive step "Cleaning local branches..." for branch in $(git branch --merged | grep -v '^*'); do # Do not delete master as the main branch if ! [[ $branch =~ (develop|main|master) ]]; then git branch -d ${branch} fi done step "Removing local branches where remote branch is gone..." if (git branch -vv | grep -q ': gone]'); then git branch -vv | awk '/: gone]/{print $1}' | xargs git branch -D fi