diff options
Diffstat (limited to 'bash/bash_completion.d/git.bash')
-rw-r--r-- | bash/bash_completion.d/git.bash | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/bash/bash_completion.d/git.bash b/bash/bash_completion.d/git.bash new file mode 100644 index 00000000..496712ae --- /dev/null +++ b/bash/bash_completion.d/git.bash @@ -0,0 +1,27 @@ +# Completion for git local branch names +_git() { + + # Bail if not a git repo (or no git!) + git rev-parse --git-dir >/dev/null 2>&1 || return 1 + + # Switch on the previous word + case ${COMP_WORDS[1]} in + + # If the first word is appropriate, complete with branch/tag names + checkout|merge|rebase) + local branch + while read -r _ _ branch ; do + branch=${branch##*/} + [[ $branch == "${COMP_WORDS[COMP_CWORD]}"* ]] || continue + COMPREPLY[${#COMPREPLY[@]}]=$branch + done < <(git for-each-ref refs/heads refs/tags 2>/dev/null) + return + ;; + + # Bail if it isn't + *) + return 1 + ;; + esac +} +complete -F _git -o default git |