_gitbcheckout() { [ "$COMP_CWORD" -gt 1 ] && return # Complete only single branch local cur prev words cword _init_completion || return local gdir branch gdir="$(git rev-parse --git-common-dir 2>/dev/null)" || return local branches=() # TODO ignore current HEAD (merging HEAD to HEAD does not makes sense) while read -r branch; do branches+=("$branch") done < <(find "$gdir/refs/heads" "$gdir/refs/remotes" -mindepth 1 -printf '%P\n') COMPREPLY=($(compgen -W "${branches[*]}" -- ${cur})) } complete -F _gitbcheckout gitbcheckout