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 __git_has_doubledash && return
631 __gitcomp "$(__git_refs)"
636 __gitcomp "$(__git_refs)"
641 local cur="${COMP_WORDS[COMP_CWORD]}"
644 __gitcomp "--edit --no-commit"
647 __gitcomp "$(__git_refs)"
654 __git_has_doubledash && return
656 local cur="${COMP_WORDS[COMP_CWORD]}"
660 --all --author= --signoff --verify --no-verify
661 --edit --amend --include --only
670 local cur="${COMP_WORDS[COMP_CWORD]}"
674 --all --tags --contains --abbrev= --candidates=
675 --exact-match --debug --long --match --always
679 __gitcomp "$(__git_refs)"
684 __git_has_doubledash && return
686 local cur="${COMP_WORDS[COMP_CWORD]}"
689 __gitcomp "--cached --stat --numstat --shortstat --summary
690 --patch-with-stat --name-only --name-status --color
691 --no-color --color-words --no-renames --check
692 --full-index --binary --abbrev --diff-filter
693 --find-copies-harder --pickaxe-all --pickaxe-regex
694 --text --ignore-space-at-eol --ignore-space-change
695 --ignore-all-space --exit-code --quiet --ext-diff
697 --no-prefix --src-prefix= --dst-prefix=
698 --base --ours --theirs
708 __gitcomp "$(__git_refs)"
713 local cur="${COMP_WORDS[COMP_CWORD]}"
715 case "${COMP_WORDS[0]},$COMP_CWORD" in
717 __gitcomp "$(__git_remotes)"
720 __gitcomp "$(__git_remotes)"
726 case "$COMP_WORDBREAKS" in
728 *) pfx="${cur%%:*}:" ;;
730 __gitcomp "$(__git_refs)" "$pfx" "${cur#*:}"
734 case "${COMP_WORDS[0]}" in
735 git-fetch) remote="${COMP_WORDS[1]}" ;;
736 git) remote="${COMP_WORDS[2]}" ;;
738 __gitcomp "$(__git_refs2 "$remote")"
747 local cur="${COMP_WORDS[COMP_CWORD]}"
751 --stdout --attach --thread
753 --numbered --start-number
758 --full-index --binary
761 --no-prefix --src-prefix= --dst-prefix=
766 __git_complete_revlist
771 local cur="${COMP_WORDS[COMP_CWORD]}"
774 __gitcomp "--prune --aggressive"
783 __gitcomp "$(__git_remotes)"
793 __git_has_doubledash && return
795 local cur="${COMP_WORDS[COMP_CWORD]}"
799 oneline short medium full fuller email raw
800 " "" "${cur##--pretty=}"
805 relative iso8601 rfc2822 short local default
806 " "" "${cur##--date=}"
811 --max-count= --max-age= --since= --after=
812 --min-age= --before= --until=
813 --root --topo-order --date-order --reverse
815 --abbrev-commit --abbrev=
816 --relative-date --date=
817 --author= --committer= --grep=
819 --pretty= --name-status --name-only --raw
821 --left-right --cherry-pick
823 --stat --numstat --shortstat
824 --decorate --diff-filter=
825 --color-words --walk-reflogs
830 __git_complete_revlist
835 local cur="${COMP_WORDS[COMP_CWORD]}"
836 case "${COMP_WORDS[COMP_CWORD-1]}" in
838 __gitcomp "$(__git_merge_strategies)"
843 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
848 --no-commit --no-stat --log --no-log --squash --strategy
852 __gitcomp "$(__git_refs)"
857 __gitcomp "$(__git_refs)"
862 __gitcomp "--tags --all --stdin"
867 local cur="${COMP_WORDS[COMP_CWORD]}"
869 case "${COMP_WORDS[0]},$COMP_CWORD" in
871 __gitcomp "$(__git_remotes)"
874 __gitcomp "$(__git_remotes)"
878 case "${COMP_WORDS[0]}" in
879 git-pull) remote="${COMP_WORDS[1]}" ;;
880 git) remote="${COMP_WORDS[2]}" ;;
882 __gitcomp "$(__git_refs "$remote")"
889 local cur="${COMP_WORDS[COMP_CWORD]}"
891 case "${COMP_WORDS[0]},$COMP_CWORD" in
893 __gitcomp "$(__git_remotes)"
896 __gitcomp "$(__git_remotes)"
902 case "${COMP_WORDS[0]}" in
903 git-push) remote="${COMP_WORDS[1]}" ;;
904 git) remote="${COMP_WORDS[2]}" ;;
908 case "$COMP_WORDBREAKS" in
910 *) pfx="${cur%%:*}:" ;;
913 __gitcomp "$(__git_refs "$remote")" "$pfx" "${cur#*:}"
916 __gitcomp "$(__git_refs)" + "${cur#+}"
919 __gitcomp "$(__git_refs)"
928 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
929 if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
930 __gitcomp "--continue --skip --abort"
933 case "${COMP_WORDS[COMP_CWORD-1]}" in
935 __gitcomp "$(__git_merge_strategies)"
940 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
944 __gitcomp "--onto --merge --strategy --interactive"
947 __gitcomp "$(__git_refs)"
952 local cur="${COMP_WORDS[COMP_CWORD]}"
955 __gitcomp "--bcc --cc --cc-cmd --chain-reply-to --compose
956 --dry-run --envelope-sender --from --identity
957 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
958 --no-suppress-from --no-thread --quiet
959 --signed-off-by-cc --smtp-pass --smtp-server
960 --smtp-server-port --smtp-ssl --smtp-user --subject
961 --suppress-cc --suppress-from --thread --to"
970 local cur="${COMP_WORDS[COMP_CWORD]}"
971 local prv="${COMP_WORDS[COMP_CWORD-1]}"
974 __gitcomp "$(__git_remotes)"
978 __gitcomp "$(__git_refs)"
982 local remote="${prv#remote.}"
983 remote="${remote%.fetch}"
984 __gitcomp "$(__git_refs_remotes "$remote")"
988 local remote="${prv#remote.}"
989 remote="${remote%.push}"
990 __gitcomp "$(git --git-dir="$(__gitdir)" \
991 for-each-ref --format='%(refname):%(refname)' \
995 pull.twohead|pull.octopus)
996 __gitcomp "$(__git_merge_strategies)"
999 color.branch|color.diff|color.status)
1000 __gitcomp "always never auto"
1005 black red green yellow blue magenta cyan white
1006 bold dim ul blink reverse
1018 --global --system --file=
1019 --list --replace-all
1020 --get --get-all --get-regexp
1021 --add --unset --unset-all
1022 --remove-section --rename-section
1027 local pfx="${cur%.*}."
1029 __gitcomp "remote merge" "$pfx" "$cur"
1033 local pfx="${cur%.*}."
1035 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
1039 local pfx="${cur%.*}."
1042 url fetch push skipDefaultUpdate
1043 receivepack uploadpack tagopt
1048 local pfx="${cur%.*}."
1050 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
1059 core.preferSymlinkRefs
1060 core.logAllRefUpdates
1061 core.loosecompression
1062 core.repositoryFormatVersion
1063 core.sharedRepository
1064 core.warnAmbiguousRefs
1066 core.packedGitWindowSize
1070 color.branch.current
1081 color.diff.whitespace
1086 color.status.changed
1087 color.status.untracked
1092 format.subjectprefix
1096 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
1097 gitcvs.dbtablenameprefix
1100 gc.reflogexpireunreachable
1113 i18n.logOutputEncoding
1123 pack.deltaCacheLimit
1126 repack.useDeltaBaseOffset
1129 transfer.unpackLimit
1131 receive.denyNonFastForwards
1141 local subcommands="add rm show prune update"
1142 local subcommand="$(__git_find_subcommand "$subcommands")"
1143 if [ -z "$subcommand" ]; then
1144 __gitcomp "$subcommands"
1148 case "$subcommand" in
1150 __gitcomp "$(__git_remotes)"
1153 local i c='' IFS=$'\n'
1154 for i in $(git --git-dir="$(__gitdir)" config --list); do
1172 __git_has_doubledash && return
1174 local cur="${COMP_WORDS[COMP_CWORD]}"
1177 __gitcomp "--mixed --hard --soft"
1181 __gitcomp "$(__git_refs)"
1186 __git_has_doubledash && return
1188 local cur="${COMP_WORDS[COMP_CWORD]}"
1191 __gitcomp "--cached --dry-run --ignore-unmatch --quiet"
1200 __git_has_doubledash && return
1202 local cur="${COMP_WORDS[COMP_CWORD]}"
1206 --max-count= --max-age= --since= --after=
1207 --min-age= --before= --until=
1209 --author= --committer= --grep=
1212 --numbered --summary
1217 __git_complete_revlist
1222 local cur="${COMP_WORDS[COMP_CWORD]}"
1226 oneline short medium full fuller email raw
1227 " "" "${cur##--pretty=}"
1231 __gitcomp "--pretty="
1240 local cur="${COMP_WORDS[COMP_CWORD]}"
1244 --all --remotes --topo-order --current --more=
1245 --list --independent --merge-base --no-name
1246 --sha1-name --topics --reflog
1251 __git_complete_revlist
1256 local subcommands='save list show apply clear drop pop create'
1257 local subcommand="$(__git_find_subcommand "$subcommands")"
1258 if [ -z "$subcommand" ]; then
1259 __gitcomp "$subcommands"
1261 local cur="${COMP_WORDS[COMP_CWORD]}"
1262 case "$subcommand,$cur" in
1264 __gitcomp "--keep-index"
1275 __git_has_doubledash && return
1277 local subcommands="add status init update"
1278 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1279 local cur="${COMP_WORDS[COMP_CWORD]}"
1282 __gitcomp "--quiet --cached"
1285 __gitcomp "$subcommands"
1295 init fetch clone rebase dcommit log find-rev
1296 set-tree commit-diff info create-ignore propget
1297 proplist show-ignore show-externals
1299 local subcommand="$(__git_find_subcommand "$subcommands")"
1300 if [ -z "$subcommand" ]; then
1301 __gitcomp "$subcommands"
1303 local remote_opts="--username= --config-dir= --no-auth-cache"
1305 --follow-parent --authors-file= --repack=
1306 --no-metadata --use-svm-props --use-svnsync-props
1307 --log-window-size= --no-checkout --quiet
1308 --repack-flags --user-log-author $remote_opts
1311 --template= --shared= --trunk= --tags=
1312 --branches= --stdlayout --minimize-url
1313 --no-metadata --use-svm-props --use-svnsync-props
1314 --rewrite-root= $remote_opts
1317 --edit --rmdir --find-copies-harder --copy-similarity=
1320 local cur="${COMP_WORDS[COMP_CWORD]}"
1321 case "$subcommand,$cur" in
1323 __gitcomp "--revision= --fetch-all $fc_opts"
1326 __gitcomp "--revision= $fc_opts $init_opts"
1329 __gitcomp "$init_opts"
1333 --merge --strategy= --verbose --dry-run
1334 --fetch-all --no-rebase $cmt_opts $fc_opts
1338 __gitcomp "--stdin $cmt_opts $fc_opts"
1340 create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
1342 __gitcomp "--revision="
1346 --limit= --revision= --verbose --incremental
1347 --oneline --show-commit --non-recursive
1353 --merge --verbose --strategy= --local
1354 --fetch-all $fc_opts
1358 __gitcomp "--message= --file= --revision= $cmt_opts"
1373 while [ $c -lt $COMP_CWORD ]; do
1374 i="${COMP_WORDS[c]}"
1377 __gitcomp "$(__git_tags)"
1387 case "${COMP_WORDS[COMP_CWORD-1]}" in
1393 __gitcomp "$(__git_tags)"
1399 __gitcomp "$(__git_refs)"
1406 local i c=1 command __git_dir
1408 while [ $c -lt $COMP_CWORD ]; do
1409 i="${COMP_WORDS[c]}"
1411 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
1412 --bare) __git_dir="." ;;
1413 --version|--help|-p|--paginate) ;;
1414 *) command="$i"; break ;;
1419 if [ -z "$command" ]; then
1420 case "${COMP_WORDS[COMP_CWORD]}" in
1421 --*=*) COMPREPLY=() ;;
1433 *) __gitcomp "$(__git_commands) $(__git_aliases)" ;;
1438 local expansion=$(__git_aliased_command "$command")
1439 [ "$expansion" ] && command="$expansion"
1444 apply) _git_apply ;;
1445 bisect) _git_bisect ;;
1446 bundle) _git_bundle ;;
1447 branch) _git_branch ;;
1448 checkout) _git_checkout ;;
1449 cherry) _git_cherry ;;
1450 cherry-pick) _git_cherry_pick ;;
1451 commit) _git_commit ;;
1452 config) _git_config ;;
1453 describe) _git_describe ;;
1455 fetch) _git_fetch ;;
1456 format-patch) _git_format_patch ;;
1459 ls-remote) _git_ls_remote ;;
1460 ls-tree) _git_ls_tree ;;
1462 merge-base) _git_merge_base ;;
1463 name-rev) _git_name_rev ;;
1466 rebase) _git_rebase ;;
1467 remote) _git_remote ;;
1468 reset) _git_reset ;;
1470 send-email) _git_send_email ;;
1471 shortlog) _git_shortlog ;;
1473 show-branch) _git_show_branch ;;
1474 stash) _git_stash ;;
1475 submodule) _git_submodule ;;
1478 whatchanged) _git_log ;;
1485 __git_has_doubledash && return
1487 local cur="${COMP_WORDS[COMP_CWORD]}"
1488 local g="$(git rev-parse --git-dir 2>/dev/null)"
1490 if [ -f $g/MERGE_HEAD ]; then
1495 __gitcomp "--not --all $merge"
1499 __git_complete_revlist
1502 complete -o default -o nospace -F _git git
1503 complete -o default -o nospace -F _gitk gitk
1505 # The following are necessary only for Cygwin, and only are needed
1506 # when the user has tab-completed the executable name and consequently
1507 # included the '.exe' suffix.
1509 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
1510 complete -o default -o nospace -F _git git.exe