function ugc --description "Update git fork." # Declare our arguments argparse h/help c/current -- $argv or return # Get function name set current_name $(status current-function) set upstream_remote upstream # Check if no arguments were provided, or if the first argument is '--help' if set -ql _flag_help echo -e "Usage: $current_name" echo -e " $current_name [-h|--help] - Show this help message" echo -e " $current_name \t\t - Update master branch from '$upstream_remote' remote" echo -e " $current_name [-c|--current] - Update current branch from '$upstream_remote' remote" return 0 end # Check if we are in a git repository git status >/dev/null if not test $status -eq 0 echo "$current_name: not in a git repository" 1>&2 return 1 end # Check if upstream exists if not contains upstream (git remote) echo "$current_name: not '$upstream_remote' remote" 1>&2 echo "$current_name: use: git remote add $upstream_remote " 1>&2 return 1 end # Check what is the default branch set origin_remote origin set default_branch (git remote show $origin_remote | sed -n '/HEAD/s/.*: //p') set current_branch (git rev-parse --abbrev-ref HEAD) if not set -ql _flag_current # Change to default branch git switch $default_branch end # Pull from the origin remote git pull $origin_remote $default_branch # Merge upstream git fetch $upstream_remote git pull $upstream_remote $default_branch git push $origin_remote $default_branch if not set -ql _flag_current # Return to the branch we were before if we changed git switch $current_branch end end