aboutsummaryrefslogtreecommitdiff
path: root/bash/bash_completion.d/git.bash
diff options
context:
space:
mode:
Diffstat (limited to 'bash/bash_completion.d/git.bash')
-rw-r--r--bash/bash_completion.d/git.bash27
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