2 # bash completion support for core Git.
4 # Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
5 # Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
6 # Distributed under the GNU General Public License, version 2.0.
8 # The contained completion routines provide support for completing:
10 # *) local and remote branch names
11 # *) local and remote tag names
12 # *) .git/remotes file names
13 # *) git 'subcommands'
14 # *) tree paths within 'ref:path/to/file' expressions
15 # *) common --long-options
17 # To use these routines:
19 # 1) Copy this file to somewhere (e.g. ~/.git-completion.sh).
20 # 2) Added the following line to your .bashrc:
21 # source ~/.git-completion.sh
23 # 3) You may want to make sure the git executable is available
24 # in your PATH before this script is sourced, as some caching
25 # is performed while the script loads. If git isn't found
26 # at source time then all lookups will be done on demand,
27 # which may be slightly slower.
29 # 4) Consider changing your PS1 to also show the current branch:
30 # PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
32 # The argument to __git_ps1 will be displayed only if you
33 # are currently in a git repository. The %s token will be
34 # the name of the current branch.
38 # *) Read Documentation/SubmittingPatches
39 # *) Send all patches to the current maintainer:
41 # "Shawn O. Pearce" <spearce@spearce.org>
43 # *) Always CC the Git mailing list:
48 case "$COMP_WORDBREAKS" in
50 *) COMP_WORDBREAKS
="$COMP_WORDBREAKS:"
56 if [ -n "$__git_dir" ]; then
58 elif [ -d .git
]; then
61 git rev-parse
--git-dir 2>/dev
/null
63 elif [ -d "$1/.git" ]; then
72 local g
="$(git rev-parse --git-dir 2>/dev/null)"
76 if [ -d "$g/rebase-apply" ]
78 if test -f "$g/rebase-apply/rebasing"
81 elif test -f "$g/rebase-apply/applying"
87 b
="$(git symbolic-ref HEAD 2>/dev/null)"
88 elif [ -f "$g/rebase-merge/interactive" ]
91 b
="$(cat "$g/rebase-merge
/head-name
")"
92 elif [ -d "$g/rebase-merge" ]
95 b
="$(cat "$g/rebase-merge
/head-name
")"
96 elif [ -f "$g/MERGE_HEAD" ]
99 b
="$(git symbolic-ref HEAD 2>/dev/null)"
101 if [ -f "$g/BISECT_LOG" ]
105 if ! b
="$(git symbolic-ref HEAD 2>/dev/null)"
107 if ! b
="$(git describe --exact-match HEAD 2>/dev/null)"
109 b
="$(cut -c1-7 "$g/HEAD
")..."
115 printf "$1" "${b##refs/heads/}$r"
117 printf " (%s)" "${b##refs/heads/}$r"
124 local c IFS
=' '$
'\t'$
'\n'
127 --*=*) printf %s$
'\n' "$c$2" ;;
128 *.
) printf %s$
'\n' "$c$2" ;;
129 *) printf %s$
'\n' "$c$2 " ;;
136 local cur
="${COMP_WORDS[COMP_CWORD]}"
137 if [ $# -gt 2 ]; then
146 COMPREPLY
=($
(compgen
-P "$2" \
147 -W "$(__gitcomp_1 "$1" "$4")" \
155 local cmd i is_hash
=y dir
="$(__gitdir "$1")"
156 if [ -d "$dir" ]; then
157 for i
in $
(git
--git-dir="$dir" \
158 for-each-ref
--format='%(refname)' \
160 echo "${i#refs/heads/}"
164 for i
in $
(git ls-remote
"$1" 2>/dev
/null
); do
165 case "$is_hash,$i" in
168 n
,refs
/heads
/*) is_hash
=y
; echo "${i#refs/heads/}" ;;
169 n
,*) is_hash
=y
; echo "$i" ;;
176 local cmd i is_hash
=y dir
="$(__gitdir "$1")"
177 if [ -d "$dir" ]; then
178 for i
in $
(git
--git-dir="$dir" \
179 for-each-ref
--format='%(refname)' \
181 echo "${i#refs/tags/}"
185 for i
in $
(git ls-remote
"$1" 2>/dev
/null
); do
186 case "$is_hash,$i" in
189 n
,refs
/tags
/*) is_hash
=y
; echo "${i#refs/tags/}" ;;
190 n
,*) is_hash
=y
; echo "$i" ;;
197 local cmd i is_hash
=y dir
="$(__gitdir "$1")"
198 if [ -d "$dir" ]; then
199 if [ -e "$dir/HEAD" ]; then echo HEAD
; fi
200 for i
in $
(git
--git-dir="$dir" \
201 for-each-ref
--format='%(refname)' \
202 refs
/tags refs
/heads refs
/remotes
); do
204 refs
/tags
/*) echo "${i#refs/tags/}" ;;
205 refs
/heads
/*) echo "${i#refs/heads/}" ;;
206 refs
/remotes
/*) echo "${i#refs/remotes/}" ;;
212 for i
in $
(git ls-remote
"$dir" 2>/dev
/null
); do
213 case "$is_hash,$i" in
216 n
,refs
/tags
/*) is_hash
=y
; echo "${i#refs/tags/}" ;;
217 n
,refs
/heads
/*) is_hash
=y
; echo "${i#refs/heads/}" ;;
218 n
,refs
/remotes
/*) is_hash
=y
; echo "${i#refs/remotes/}" ;;
219 n
,*) is_hash
=y
; echo "$i" ;;
227 for i
in $
(__git_refs
"$1"); do
232 __git_refs_remotes
()
234 local cmd i is_hash
=y
235 for i
in $
(git ls-remote
"$1" 2>/dev
/null
); do
236 case "$is_hash,$i" in
239 echo "$i:refs/remotes/$1/${i#refs/heads/}"
243 n
,refs
/tags
/*) is_hash
=y
;;
251 local i ngoff IFS
=$
'\n' d
="$(__gitdir)"
252 shopt -q nullglob || ngoff
=1
254 for i
in "$d/remotes"/*; do
255 echo ${i#$d/remotes/}
257 [ "$ngoff" ] && shopt -u nullglob
258 for i
in $
(git
--git-dir="$d" config
--list); do
268 __git_merge_strategies
()
270 if [ -n "$__git_merge_strategylist" ]; then
271 echo "$__git_merge_strategylist"
274 sed -n "/^all_strategies='/{
275 s/^all_strategies='//
279 }" "$(git --exec-path)/git-merge"
281 __git_merge_strategylist
=
282 __git_merge_strategylist
="$(__git_merge_strategies 2>/dev/null)"
284 __git_complete_file
()
286 local pfx
ls ref cur
="${COMP_WORDS[COMP_CWORD]}"
303 case "$COMP_WORDBREAKS" in
305 *) pfx
="$ref:$pfx" ;;
309 COMPREPLY
=($
(compgen
-P "$pfx" \
310 -W "$(git --git-dir="$
(__gitdir
)" ls-tree "$ls" \
311 | sed '/^100... blob /{
327 __gitcomp
"$(__git_refs)"
332 __git_complete_revlist
()
334 local pfx cur
="${COMP_WORDS[COMP_CWORD]}"
339 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
344 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
347 __gitcomp
"$(__git_refs)"
354 if [ -n "$__git_commandlist" ]; then
355 echo "$__git_commandlist"
359 for i
in $
(git
help -a|
egrep '^ ')
362 *--*) : helper pattern
;;
363 applymbox
) : ask gittus
;;
364 applypatch
) : ask gittus
;;
365 archimport
) : import
;;
366 cat-file
) : plumbing
;;
367 check-attr
) : plumbing
;;
368 check-ref-format
) : plumbing
;;
369 commit-tree
) : plumbing
;;
370 cvsexportcommit
) : export;;
371 cvsimport
) : import
;;
372 cvsserver
) : daemon
;;
374 diff-files
) : plumbing
;;
375 diff-index
) : plumbing
;;
376 diff-tree
) : plumbing
;;
377 fast-import
) : import
;;
378 fsck-objects
) : plumbing
;;
379 fetch-pack
) : plumbing
;;
380 fmt-merge-msg
) : plumbing
;;
381 for-each-ref
) : plumbing
;;
382 hash-object
) : plumbing
;;
383 http-
*) : transport
;;
384 index-pack
) : plumbing
;;
385 init-db
) : deprecated
;;
386 local-fetch
) : plumbing
;;
387 mailinfo
) : plumbing
;;
388 mailsplit
) : plumbing
;;
389 merge-
*) : plumbing
;;
392 pack-objects
) : plumbing
;;
393 pack-redundant
) : plumbing
;;
394 pack-refs
) : plumbing
;;
395 parse-remote
) : plumbing
;;
396 patch-id
) : plumbing
;;
397 peek-remote
) : plumbing
;;
399 prune-packed
) : plumbing
;;
400 quiltimport
) : import
;;
401 read-tree
) : plumbing
;;
402 receive-pack
) : plumbing
;;
404 repo-config
) : deprecated
;;
406 rev-list
) : plumbing
;;
407 rev-parse
) : plumbing
;;
408 runstatus
) : plumbing
;;
409 sh-setup
) : internal
;;
411 send-pack
) : plumbing
;;
412 show-index
) : plumbing
;;
414 stripspace
) : plumbing
;;
415 symbolic-ref
) : plumbing
;;
416 tar-tree
) : deprecated
;;
417 unpack-file
) : plumbing
;;
418 unpack-objects
) : plumbing
;;
419 update-index
) : plumbing
;;
420 update-ref
) : plumbing
;;
421 update-server-info
) : daemon
;;
422 upload-archive
) : plumbing
;;
423 upload-pack
) : plumbing
;;
424 write-tree
) : plumbing
;;
425 verify-tag
) : plumbing
;;
431 __git_commandlist
="$(__git_commands 2>/dev/null)"
436 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
446 __git_aliased_command
()
448 local word cmdline
=$
(git
--git-dir="$(__gitdir)" \
449 config
--get "alias.$1")
450 for word
in $cmdline; do
451 if [ "${word##-*}" ]; then
458 __git_find_subcommand
()
460 local word subcommand c
=1
462 while [ $c -lt $COMP_CWORD ]; do
463 word
="${COMP_WORDS[c]}"
464 for subcommand
in $1; do
465 if [ "$subcommand" = "$word" ]; then
474 __git_has_doubledash
()
477 while [ $c -lt $COMP_CWORD ]; do
478 if [ "--" = "${COMP_WORDS[c]}" ]; then
486 __git_whitespacelist
="nowarn warn error error-all strip"
490 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
491 if [ -d "$dir"/rebase-apply
]; then
492 __gitcomp
"--skip --resolved --abort"
497 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
502 --signoff --utf8 --binary --3way --interactive
512 local cur
="${COMP_WORDS[COMP_CWORD]}"
515 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
520 --stat --numstat --summary --check --index
521 --cached --index-info --reverse --reject --unidiff-zero
522 --apply --no-add --exclude=
523 --whitespace= --inaccurate-eof --verbose
532 __git_has_doubledash
&& return
534 local cur
="${COMP_WORDS[COMP_CWORD]}"
538 --interactive --refresh --patch --update --dry-run
548 __git_has_doubledash
&& return
550 local subcommands
="start bad good skip reset visualize replay log run"
551 local subcommand
="$(__git_find_subcommand "$subcommands")"
552 if [ -z "$subcommand" ]; then
553 __gitcomp
"$subcommands"
557 case "$subcommand" in
559 __gitcomp
"$(__git_refs)"
569 local i c
=1 only_local_ref
="n" has_r
="n"
571 while [ $c -lt $COMP_CWORD ]; do
574 -d|
-m) only_local_ref
="y" ;;
580 case "${COMP_WORDS[COMP_CWORD]}" in
581 --*=*) COMPREPLY
=() ;;
584 --color --no-color --verbose --abbrev= --no-abbrev
585 --track --no-track --contains --merged --no-merged
589 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
590 __gitcomp
"$(__git_heads)"
592 __gitcomp
"$(__git_refs)"
600 local mycword
="$COMP_CWORD"
601 case "${COMP_WORDS[0]}" in
603 local cmd
="${COMP_WORDS[2]}"
604 mycword
="$((mycword-1))"
607 local cmd
="${COMP_WORDS[1]}"
612 __gitcomp
"create list-heads verify unbundle"
620 __git_complete_revlist
629 __gitcomp
"$(__git_refs)"
634 __gitcomp
"$(__git_refs)"
639 local cur
="${COMP_WORDS[COMP_CWORD]}"
642 __gitcomp
"--edit --no-commit"
645 __gitcomp
"$(__git_refs)"
652 __git_has_doubledash
&& return
654 local cur
="${COMP_WORDS[COMP_CWORD]}"
658 --all --author= --signoff --verify --no-verify
659 --edit --amend --include --only
668 __gitcomp
"$(__git_refs)"
673 __git_has_doubledash
&& return
675 local cur
="${COMP_WORDS[COMP_CWORD]}"
678 __gitcomp
"--cached --stat --numstat --shortstat --summary
679 --patch-with-stat --name-only --name-status --color
680 --no-color --color-words --no-renames --check
681 --full-index --binary --abbrev --diff-filter
682 --find-copies-harder --pickaxe-all --pickaxe-regex
683 --text --ignore-space-at-eol --ignore-space-change
684 --ignore-all-space --exit-code --quiet --ext-diff
686 --no-prefix --src-prefix= --dst-prefix=
687 --base --ours --theirs
697 __gitcomp
"$(__git_refs)"
702 local cur
="${COMP_WORDS[COMP_CWORD]}"
704 case "${COMP_WORDS[0]},$COMP_CWORD" in
706 __gitcomp
"$(__git_remotes)"
709 __gitcomp
"$(__git_remotes)"
715 case "$COMP_WORDBREAKS" in
717 *) pfx
="${cur%%:*}:" ;;
719 __gitcomp
"$(__git_refs)" "$pfx" "${cur#*:}"
723 case "${COMP_WORDS[0]}" in
724 git-fetch
) remote
="${COMP_WORDS[1]}" ;;
725 git
) remote
="${COMP_WORDS[2]}" ;;
727 __gitcomp
"$(__git_refs2 "$remote")"
736 local cur
="${COMP_WORDS[COMP_CWORD]}"
740 --stdout --attach --thread
742 --numbered --start-number
747 --full-index --binary
750 --no-prefix --src-prefix= --dst-prefix=
755 __git_complete_revlist
760 local cur
="${COMP_WORDS[COMP_CWORD]}"
763 __gitcomp
"--prune --aggressive"
772 __gitcomp
"$(__git_remotes)"
782 __git_has_doubledash
&& return
784 local cur
="${COMP_WORDS[COMP_CWORD]}"
788 oneline short medium full fuller email raw
789 " "" "${cur##--pretty=}"
794 relative iso8601 rfc2822 short local default
795 " "" "${cur##--date=}"
800 --max-count= --max-age= --since= --after=
801 --min-age= --before= --until=
802 --root --topo-order --date-order --reverse
804 --abbrev-commit --abbrev=
805 --relative-date --date=
806 --author= --committer= --grep=
808 --pretty= --name-status --name-only --raw
810 --left-right --cherry-pick
812 --stat --numstat --shortstat
813 --decorate --diff-filter=
814 --color-words --walk-reflogs
819 __git_complete_revlist
824 local cur
="${COMP_WORDS[COMP_CWORD]}"
825 case "${COMP_WORDS[COMP_CWORD-1]}" in
827 __gitcomp
"$(__git_merge_strategies)"
832 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
837 --no-commit --no-stat --log --no-log --squash --strategy
841 __gitcomp
"$(__git_refs)"
846 __gitcomp
"$(__git_refs)"
851 __gitcomp
"--tags --all --stdin"
856 local cur
="${COMP_WORDS[COMP_CWORD]}"
858 case "${COMP_WORDS[0]},$COMP_CWORD" in
860 __gitcomp
"$(__git_remotes)"
863 __gitcomp
"$(__git_remotes)"
867 case "${COMP_WORDS[0]}" in
868 git-pull
) remote
="${COMP_WORDS[1]}" ;;
869 git
) remote
="${COMP_WORDS[2]}" ;;
871 __gitcomp
"$(__git_refs "$remote")"
878 local cur
="${COMP_WORDS[COMP_CWORD]}"
880 case "${COMP_WORDS[0]},$COMP_CWORD" in
882 __gitcomp
"$(__git_remotes)"
885 __gitcomp
"$(__git_remotes)"
891 case "${COMP_WORDS[0]}" in
892 git-push
) remote
="${COMP_WORDS[1]}" ;;
893 git
) remote
="${COMP_WORDS[2]}" ;;
897 case "$COMP_WORDBREAKS" in
899 *) pfx
="${cur%%:*}:" ;;
902 __gitcomp
"$(__git_refs "$remote")" "$pfx" "${cur#*:}"
905 __gitcomp
"$(__git_refs)" + "${cur#+}"
908 __gitcomp
"$(__git_refs)"
917 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
918 if [ -d "$dir"/rebase-apply
] ||
[ -d "$dir"/rebase-merge
]; then
919 __gitcomp
"--continue --skip --abort"
922 case "${COMP_WORDS[COMP_CWORD-1]}" in
924 __gitcomp
"$(__git_merge_strategies)"
929 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
933 __gitcomp
"--onto --merge --strategy --interactive"
936 __gitcomp
"$(__git_refs)"
941 local cur
="${COMP_WORDS[COMP_CWORD]}"
944 __gitcomp
"--bcc --cc --cc-cmd --chain-reply-to --compose
945 --dry-run --envelope-sender --from --identity
946 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
947 --no-suppress-from --no-thread --quiet
948 --signed-off-by-cc --smtp-pass --smtp-server
949 --smtp-server-port --smtp-ssl --smtp-user --subject
950 --suppress-cc --suppress-from --thread --to"
959 local cur
="${COMP_WORDS[COMP_CWORD]}"
960 local prv
="${COMP_WORDS[COMP_CWORD-1]}"
963 __gitcomp
"$(__git_remotes)"
967 __gitcomp
"$(__git_refs)"
971 local remote
="${prv#remote.}"
972 remote
="${remote%.fetch}"
973 __gitcomp
"$(__git_refs_remotes "$remote")"
977 local remote
="${prv#remote.}"
978 remote
="${remote%.push}"
979 __gitcomp
"$(git --git-dir="$
(__gitdir
)" \
980 for-each-ref --format='%(refname):%(refname)' \
984 pull.twohead|pull.octopus
)
985 __gitcomp
"$(__git_merge_strategies)"
988 color.branch|color.
diff|color.status
)
989 __gitcomp
"always never auto"
994 black red green yellow blue magenta cyan white
995 bold dim ul blink reverse
1007 --global --system --file=
1008 --list --replace-all
1009 --get --get-all --get-regexp
1010 --add --unset --unset-all
1011 --remove-section --rename-section
1016 local pfx
="${cur%.*}."
1018 __gitcomp
"remote merge" "$pfx" "$cur"
1022 local pfx
="${cur%.*}."
1024 __gitcomp
"$(__git_heads)" "$pfx" "$cur" "."
1028 local pfx
="${cur%.*}."
1031 url fetch push skipDefaultUpdate
1032 receivepack uploadpack tagopt
1037 local pfx
="${cur%.*}."
1039 __gitcomp
"$(__git_remotes)" "$pfx" "$cur" "."
1048 core.preferSymlinkRefs
1049 core.logAllRefUpdates
1050 core.loosecompression
1051 core.repositoryFormatVersion
1052 core.sharedRepository
1053 core.warnAmbiguousRefs
1055 core.packedGitWindowSize
1059 color.branch.current
1070 color.diff.whitespace
1075 color.status.changed
1076 color.status.untracked
1081 format.subjectprefix
1085 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
1086 gitcvs.dbtablenameprefix
1089 gc.reflogexpireunreachable
1102 i18n.logOutputEncoding
1112 pack.deltaCacheLimit
1115 repack.useDeltaBaseOffset
1118 transfer.unpackLimit
1120 receive.denyNonFastForwards
1130 local subcommands
="add rm show prune update"
1131 local subcommand
="$(__git_find_subcommand "$subcommands")"
1132 if [ -z "$subcommand" ]; then
1133 __gitcomp
"$subcommands"
1137 case "$subcommand" in
1139 __gitcomp
"$(__git_remotes)"
1142 local i c
='' IFS
=$
'\n'
1143 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
1161 __git_has_doubledash
&& return
1163 local cur
="${COMP_WORDS[COMP_CWORD]}"
1166 __gitcomp
"--mixed --hard --soft"
1170 __gitcomp
"$(__git_refs)"
1175 __git_has_doubledash
&& return
1177 local cur
="${COMP_WORDS[COMP_CWORD]}"
1180 __gitcomp
"--cached --dry-run --ignore-unmatch --quiet"
1189 __git_has_doubledash
&& return
1191 local cur
="${COMP_WORDS[COMP_CWORD]}"
1195 --max-count= --max-age= --since= --after=
1196 --min-age= --before= --until=
1198 --author= --committer= --grep=
1201 --numbered --summary
1206 __git_complete_revlist
1211 local cur
="${COMP_WORDS[COMP_CWORD]}"
1215 oneline short medium full fuller email raw
1216 " "" "${cur##--pretty=}"
1220 __gitcomp
"--pretty="
1229 local cur
="${COMP_WORDS[COMP_CWORD]}"
1233 --all --remotes --topo-order --current --more=
1234 --list --independent --merge-base --no-name
1235 --sha1-name --topics --reflog
1240 __git_complete_revlist
1245 local subcommands
='save list show apply clear drop pop create'
1246 local subcommand
="$(__git_find_subcommand "$subcommands")"
1247 if [ -z "$subcommand" ]; then
1248 __gitcomp
"$subcommands"
1250 local cur
="${COMP_WORDS[COMP_CWORD]}"
1251 case "$subcommand,$cur" in
1253 __gitcomp
"--keep-index"
1264 __git_has_doubledash
&& return
1266 local subcommands
="add status init update"
1267 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1268 local cur
="${COMP_WORDS[COMP_CWORD]}"
1271 __gitcomp
"--quiet --cached"
1274 __gitcomp
"$subcommands"
1284 init fetch clone rebase dcommit log find-rev
1285 set-tree commit-diff info create-ignore propget
1286 proplist show-ignore show-externals
1288 local subcommand
="$(__git_find_subcommand "$subcommands")"
1289 if [ -z "$subcommand" ]; then
1290 __gitcomp
"$subcommands"
1292 local remote_opts
="--username= --config-dir= --no-auth-cache"
1294 --follow-parent --authors-file= --repack=
1295 --no-metadata --use-svm-props --use-svnsync-props
1296 --log-window-size= --no-checkout --quiet
1297 --repack-flags --user-log-author $remote_opts
1300 --template= --shared= --trunk= --tags=
1301 --branches= --stdlayout --minimize-url
1302 --no-metadata --use-svm-props --use-svnsync-props
1303 --rewrite-root= $remote_opts
1306 --edit --rmdir --find-copies-harder --copy-similarity=
1309 local cur
="${COMP_WORDS[COMP_CWORD]}"
1310 case "$subcommand,$cur" in
1312 __gitcomp
"--revision= --fetch-all $fc_opts"
1315 __gitcomp
"--revision= $fc_opts $init_opts"
1318 __gitcomp
"$init_opts"
1322 --merge --strategy= --verbose --dry-run
1323 --fetch-all --no-rebase $cmt_opts $fc_opts
1327 __gitcomp
"--stdin $cmt_opts $fc_opts"
1329 create-ignore
,--*|propget
,--*|proplist
,--*|show-ignore
,--*|\
1331 __gitcomp
"--revision="
1335 --limit= --revision= --verbose --incremental
1336 --oneline --show-commit --non-recursive
1342 --merge --verbose --strategy= --local
1343 --fetch-all $fc_opts
1347 __gitcomp
"--message= --file= --revision= $cmt_opts"
1362 while [ $c -lt $COMP_CWORD ]; do
1363 i
="${COMP_WORDS[c]}"
1366 __gitcomp
"$(__git_tags)"
1376 case "${COMP_WORDS[COMP_CWORD-1]}" in
1382 __gitcomp
"$(__git_tags)"
1388 __gitcomp
"$(__git_refs)"
1395 local i c
=1 command __git_dir
1397 while [ $c -lt $COMP_CWORD ]; do
1398 i
="${COMP_WORDS[c]}"
1400 --git-dir=*) __git_dir
="${i#--git-dir=}" ;;
1401 --bare) __git_dir
="." ;;
1402 --version|
--help|
-p|
--paginate) ;;
1403 *) command="$i"; break ;;
1408 if [ -z "$command" ]; then
1409 case "${COMP_WORDS[COMP_CWORD]}" in
1410 --*=*) COMPREPLY
=() ;;
1422 *) __gitcomp
"$(__git_commands) $(__git_aliases)" ;;
1427 local expansion
=$
(__git_aliased_command
"$command")
1428 [ "$expansion" ] && command="$expansion"
1433 apply
) _git_apply
;;
1434 bisect
) _git_bisect
;;
1435 bundle
) _git_bundle
;;
1436 branch
) _git_branch
;;
1437 checkout
) _git_checkout
;;
1438 cherry
) _git_cherry
;;
1439 cherry-pick
) _git_cherry_pick
;;
1440 commit
) _git_commit
;;
1441 config
) _git_config
;;
1442 describe
) _git_describe
;;
1444 fetch
) _git_fetch
;;
1445 format-patch
) _git_format_patch
;;
1448 ls-remote
) _git_ls_remote
;;
1449 ls-tree
) _git_ls_tree
;;
1451 merge-base
) _git_merge_base
;;
1452 name-rev
) _git_name_rev
;;
1455 rebase
) _git_rebase
;;
1456 remote
) _git_remote
;;
1457 reset) _git_reset
;;
1459 send-email
) _git_send_email
;;
1460 shortlog
) _git_shortlog
;;
1462 show-branch
) _git_show_branch
;;
1463 stash
) _git_stash
;;
1464 submodule
) _git_submodule
;;
1467 whatchanged
) _git_log
;;
1474 __git_has_doubledash
&& return
1476 local cur
="${COMP_WORDS[COMP_CWORD]}"
1477 local g
="$(git rev-parse --git-dir 2>/dev/null)"
1479 if [ -f $g/MERGE_HEAD
]; then
1484 __gitcomp
"--not --all $merge"
1488 __git_complete_revlist
1491 complete
-o default
-o nospace
-F _git git
1492 complete
-o default
-o nospace
-F _gitk gitk
1494 # The following are necessary only for Cygwin, and only are needed
1495 # when the user has tab-completed the executable name and consequently
1496 # included the '.exe' suffix.
1498 if [ Cygwin
= "$(uname -o 2>/dev/null)" ]; then
1499 complete
-o default
-o nospace
-F _git git.exe