#!/usr/bin/env bash usage() { echo 1>&2 "usage: git missing [] [] [[--] ...]" } if [ "${#}" -lt 1 ] then usage exit 1 fi declare -a git_log_args=() declare -a branches=() declare -a pathspec=() declare parse_path=false for arg in "$@" ; do if [[ $parse_path == true ]]; then pathspec+=("$@") break fi case "$arg" in --) parse_path=true ;; --*) git_log_args+=( "$arg" ) ;; *) branches+=( "$arg" ) ;; esac done firstbranch= secondbranch= if [ ${#branches[@]} -eq 2 ] then firstbranch="${branches[0]}" secondbranch="${branches[1]}" elif [ ${#branches[@]} -eq 1 ] then secondbranch="${branches[0]}" else echo >&2 "error: at least one branch required" exit 1 fi git log "${git_log_args[@]}" "$firstbranch"..."$secondbranch" --format="%m %h %s" --left-right -- "${pathspec[@]}"