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 __gitcomp "$(__git_refs)"
675 __git_has_doubledash && return
677 local cur="${COMP_WORDS[COMP_CWORD]}"
680 __gitcomp "--cached --stat --numstat --shortstat --summary
681 --patch-with-stat --name-only --name-status --color
682 --no-color --color-words --no-renames --check
683 --full-index --binary --abbrev --diff-filter
684 --find-copies-harder --pickaxe-all --pickaxe-regex
685 --text --ignore-space-at-eol --ignore-space-change
686 --ignore-all-space --exit-code --quiet --ext-diff
688 --no-prefix --src-prefix= --dst-prefix=
689 --base --ours --theirs
699 __gitcomp "$(__git_refs)"
704 local cur="${COMP_WORDS[COMP_CWORD]}"
706 case "${COMP_WORDS[0]},$COMP_CWORD" in
708 __gitcomp "$(__git_remotes)"
711 __gitcomp "$(__git_remotes)"
717 case "$COMP_WORDBREAKS" in
719 *) pfx="${cur%%:*}:" ;;
721 __gitcomp "$(__git_refs)" "$pfx" "${cur#*:}"
725 case "${COMP_WORDS[0]}" in
726 git-fetch) remote="${COMP_WORDS[1]}" ;;
727 git) remote="${COMP_WORDS[2]}" ;;
729 __gitcomp "$(__git_refs2 "$remote")"
738 local cur="${COMP_WORDS[COMP_CWORD]}"
742 --stdout --attach --thread
744 --numbered --start-number
749 --full-index --binary
752 --no-prefix --src-prefix= --dst-prefix=
757 __git_complete_revlist
762 local cur="${COMP_WORDS[COMP_CWORD]}"
765 __gitcomp "--prune --aggressive"
774 __gitcomp "$(__git_remotes)"
784 __git_has_doubledash && return
786 local cur="${COMP_WORDS[COMP_CWORD]}"
790 oneline short medium full fuller email raw
791 " "" "${cur##--pretty=}"
796 relative iso8601 rfc2822 short local default
797 " "" "${cur##--date=}"
802 --max-count= --max-age= --since= --after=
803 --min-age= --before= --until=
804 --root --topo-order --date-order --reverse
806 --abbrev-commit --abbrev=
807 --relative-date --date=
808 --author= --committer= --grep=
810 --pretty= --name-status --name-only --raw
812 --left-right --cherry-pick
814 --stat --numstat --shortstat
815 --decorate --diff-filter=
816 --color-words --walk-reflogs
821 __git_complete_revlist
826 local cur="${COMP_WORDS[COMP_CWORD]}"
827 case "${COMP_WORDS[COMP_CWORD-1]}" in
829 __gitcomp "$(__git_merge_strategies)"
834 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
839 --no-commit --no-stat --log --no-log --squash --strategy
843 __gitcomp "$(__git_refs)"
848 __gitcomp "$(__git_refs)"
853 __gitcomp "--tags --all --stdin"
858 local cur="${COMP_WORDS[COMP_CWORD]}"
860 case "${COMP_WORDS[0]},$COMP_CWORD" in
862 __gitcomp "$(__git_remotes)"
865 __gitcomp "$(__git_remotes)"
869 case "${COMP_WORDS[0]}" in
870 git-pull) remote="${COMP_WORDS[1]}" ;;
871 git) remote="${COMP_WORDS[2]}" ;;
873 __gitcomp "$(__git_refs "$remote")"
880 local cur="${COMP_WORDS[COMP_CWORD]}"
882 case "${COMP_WORDS[0]},$COMP_CWORD" in
884 __gitcomp "$(__git_remotes)"
887 __gitcomp "$(__git_remotes)"
893 case "${COMP_WORDS[0]}" in
894 git-push) remote="${COMP_WORDS[1]}" ;;
895 git) remote="${COMP_WORDS[2]}" ;;
899 case "$COMP_WORDBREAKS" in
901 *) pfx="${cur%%:*}:" ;;
904 __gitcomp "$(__git_refs "$remote")" "$pfx" "${cur#*:}"
907 __gitcomp "$(__git_refs)" + "${cur#+}"
910 __gitcomp "$(__git_refs)"
919 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
920 if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
921 __gitcomp "--continue --skip --abort"
924 case "${COMP_WORDS[COMP_CWORD-1]}" in
926 __gitcomp "$(__git_merge_strategies)"
931 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
935 __gitcomp "--onto --merge --strategy --interactive"
938 __gitcomp "$(__git_refs)"
943 local cur="${COMP_WORDS[COMP_CWORD]}"
946 __gitcomp "--bcc --cc --cc-cmd --chain-reply-to --compose
947 --dry-run --envelope-sender --from --identity
948 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
949 --no-suppress-from --no-thread --quiet
950 --signed-off-by-cc --smtp-pass --smtp-server
951 --smtp-server-port --smtp-ssl --smtp-user --subject
952 --suppress-cc --suppress-from --thread --to"
961 local cur="${COMP_WORDS[COMP_CWORD]}"
962 local prv="${COMP_WORDS[COMP_CWORD-1]}"
965 __gitcomp "$(__git_remotes)"
969 __gitcomp "$(__git_refs)"
973 local remote="${prv#remote.}"
974 remote="${remote%.fetch}"
975 __gitcomp "$(__git_refs_remotes "$remote")"
979 local remote="${prv#remote.}"
980 remote="${remote%.push}"
981 __gitcomp "$(git --git-dir="$(__gitdir)" \
982 for-each-ref --format='%(refname):%(refname)' \
986 pull.twohead|pull.octopus)
987 __gitcomp "$(__git_merge_strategies)"
990 color.branch|color.diff|color.status)
991 __gitcomp "always never auto"
996 black red green yellow blue magenta cyan white
997 bold dim ul blink reverse
1009 --global --system --file=
1010 --list --replace-all
1011 --get --get-all --get-regexp
1012 --add --unset --unset-all
1013 --remove-section --rename-section
1018 local pfx="${cur%.*}."
1020 __gitcomp "remote merge" "$pfx" "$cur"
1024 local pfx="${cur%.*}."
1026 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
1030 local pfx="${cur%.*}."
1033 url fetch push skipDefaultUpdate
1034 receivepack uploadpack tagopt
1039 local pfx="${cur%.*}."
1041 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
1050 core.preferSymlinkRefs
1051 core.logAllRefUpdates
1052 core.loosecompression
1053 core.repositoryFormatVersion
1054 core.sharedRepository
1055 core.warnAmbiguousRefs
1057 core.packedGitWindowSize
1061 color.branch.current
1072 color.diff.whitespace
1077 color.status.changed
1078 color.status.untracked
1083 format.subjectprefix
1087 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
1088 gitcvs.dbtablenameprefix
1091 gc.reflogexpireunreachable
1104 i18n.logOutputEncoding
1114 pack.deltaCacheLimit
1117 repack.useDeltaBaseOffset
1120 transfer.unpackLimit
1122 receive.denyNonFastForwards
1132 local subcommands="add rm show prune update"
1133 local subcommand="$(__git_find_subcommand "$subcommands")"
1134 if [ -z "$subcommand" ]; then
1135 __gitcomp "$subcommands"
1139 case "$subcommand" in
1141 __gitcomp "$(__git_remotes)"
1144 local i c='' IFS=$'\n'
1145 for i in $(git --git-dir="$(__gitdir)" config --list); do
1163 __git_has_doubledash && return
1165 local cur="${COMP_WORDS[COMP_CWORD]}"
1168 __gitcomp "--mixed --hard --soft"
1172 __gitcomp "$(__git_refs)"
1177 __git_has_doubledash && return
1179 local cur="${COMP_WORDS[COMP_CWORD]}"
1182 __gitcomp "--cached --dry-run --ignore-unmatch --quiet"
1191 __git_has_doubledash && return
1193 local cur="${COMP_WORDS[COMP_CWORD]}"
1197 --max-count= --max-age= --since= --after=
1198 --min-age= --before= --until=
1200 --author= --committer= --grep=
1203 --numbered --summary
1208 __git_complete_revlist
1213 local cur="${COMP_WORDS[COMP_CWORD]}"
1217 oneline short medium full fuller email raw
1218 " "" "${cur##--pretty=}"
1222 __gitcomp "--pretty="
1231 local cur="${COMP_WORDS[COMP_CWORD]}"
1235 --all --remotes --topo-order --current --more=
1236 --list --independent --merge-base --no-name
1237 --sha1-name --topics --reflog
1242 __git_complete_revlist
1247 local subcommands='save list show apply clear drop pop create'
1248 local subcommand="$(__git_find_subcommand "$subcommands")"
1249 if [ -z "$subcommand" ]; then
1250 __gitcomp "$subcommands"
1252 local cur="${COMP_WORDS[COMP_CWORD]}"
1253 case "$subcommand,$cur" in
1255 __gitcomp "--keep-index"
1266 __git_has_doubledash && return
1268 local subcommands="add status init update"
1269 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1270 local cur="${COMP_WORDS[COMP_CWORD]}"
1273 __gitcomp "--quiet --cached"
1276 __gitcomp "$subcommands"
1286 init fetch clone rebase dcommit log find-rev
1287 set-tree commit-diff info create-ignore propget
1288 proplist show-ignore show-externals
1290 local subcommand="$(__git_find_subcommand "$subcommands")"
1291 if [ -z "$subcommand" ]; then
1292 __gitcomp "$subcommands"
1294 local remote_opts="--username= --config-dir= --no-auth-cache"
1296 --follow-parent --authors-file= --repack=
1297 --no-metadata --use-svm-props --use-svnsync-props
1298 --log-window-size= --no-checkout --quiet
1299 --repack-flags --user-log-author $remote_opts
1302 --template= --shared= --trunk= --tags=
1303 --branches= --stdlayout --minimize-url
1304 --no-metadata --use-svm-props --use-svnsync-props
1305 --rewrite-root= $remote_opts
1308 --edit --rmdir --find-copies-harder --copy-similarity=
1311 local cur="${COMP_WORDS[COMP_CWORD]}"
1312 case "$subcommand,$cur" in
1314 __gitcomp "--revision= --fetch-all $fc_opts"
1317 __gitcomp "--revision= $fc_opts $init_opts"
1320 __gitcomp "$init_opts"
1324 --merge --strategy= --verbose --dry-run
1325 --fetch-all --no-rebase $cmt_opts $fc_opts
1329 __gitcomp "--stdin $cmt_opts $fc_opts"
1331 create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
1333 __gitcomp "--revision="
1337 --limit= --revision= --verbose --incremental
1338 --oneline --show-commit --non-recursive
1344 --merge --verbose --strategy= --local
1345 --fetch-all $fc_opts
1349 __gitcomp "--message= --file= --revision= $cmt_opts"
1364 while [ $c -lt $COMP_CWORD ]; do
1365 i="${COMP_WORDS[c]}"
1368 __gitcomp "$(__git_tags)"
1378 case "${COMP_WORDS[COMP_CWORD-1]}" in
1384 __gitcomp "$(__git_tags)"
1390 __gitcomp "$(__git_refs)"
1397 local i c=1 command __git_dir
1399 while [ $c -lt $COMP_CWORD ]; do
1400 i="${COMP_WORDS[c]}"
1402 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
1403 --bare) __git_dir="." ;;
1404 --version|--help|-p|--paginate) ;;
1405 *) command="$i"; break ;;
1410 if [ -z "$command" ]; then
1411 case "${COMP_WORDS[COMP_CWORD]}" in
1412 --*=*) COMPREPLY=() ;;
1424 *) __gitcomp "$(__git_commands) $(__git_aliases)" ;;
1429 local expansion=$(__git_aliased_command "$command")
1430 [ "$expansion" ] && command="$expansion"
1435 apply) _git_apply ;;
1436 bisect) _git_bisect ;;
1437 bundle) _git_bundle ;;
1438 branch) _git_branch ;;
1439 checkout) _git_checkout ;;
1440 cherry) _git_cherry ;;
1441 cherry-pick) _git_cherry_pick ;;
1442 commit) _git_commit ;;
1443 config) _git_config ;;
1444 describe) _git_describe ;;
1446 fetch) _git_fetch ;;
1447 format-patch) _git_format_patch ;;
1450 ls-remote) _git_ls_remote ;;
1451 ls-tree) _git_ls_tree ;;
1453 merge-base) _git_merge_base ;;
1454 name-rev) _git_name_rev ;;
1457 rebase) _git_rebase ;;
1458 remote) _git_remote ;;
1459 reset) _git_reset ;;
1461 send-email) _git_send_email ;;
1462 shortlog) _git_shortlog ;;
1464 show-branch) _git_show_branch ;;
1465 stash) _git_stash ;;
1466 submodule) _git_submodule ;;
1469 whatchanged) _git_log ;;
1476 __git_has_doubledash && return
1478 local cur="${COMP_WORDS[COMP_CWORD]}"
1479 local g="$(git rev-parse --git-dir 2>/dev/null)"
1481 if [ -f $g/MERGE_HEAD ]; then
1486 __gitcomp "--not --all $merge"
1490 __git_complete_revlist
1493 complete -o default -o nospace -F _git git
1494 complete -o default -o nospace -F _gitk gitk
1496 # The following are necessary only for Cygwin, and only are needed
1497 # when the user has tab-completed the executable name and consequently
1498 # included the '.exe' suffix.
1500 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
1501 complete -o default -o nospace -F _git git.exe