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 git merge
-s help 2>&1 |
275 sed -n -e '/[Aa]vailable strategies are: /,/^$/{
283 __git_merge_strategylist
=
284 __git_merge_strategylist
=$
(__git_merge_strategies
2>/dev
/null
)
286 __git_complete_file
()
288 local pfx
ls ref cur
="${COMP_WORDS[COMP_CWORD]}"
305 case "$COMP_WORDBREAKS" in
307 *) pfx
="$ref:$pfx" ;;
311 COMPREPLY
=($
(compgen
-P "$pfx" \
312 -W "$(git --git-dir="$
(__gitdir
)" ls-tree "$ls" \
313 | sed '/^100... blob /{
329 __gitcomp
"$(__git_refs)"
334 __git_complete_revlist
()
336 local pfx cur
="${COMP_WORDS[COMP_CWORD]}"
341 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
346 __gitcomp
"$(__git_refs)" "$pfx" "$cur"
349 __gitcomp
"$(__git_refs)"
354 __git_all_commands
()
356 if [ -n "$__git_all_commandlist" ]; then
357 echo "$__git_all_commandlist"
361 for i
in $
(git
help -a|
egrep '^ ')
364 *--*) : helper pattern
;;
369 __git_all_commandlist
=
370 __git_all_commandlist
="$(__git_all_commands 2>/dev/null)"
372 __git_porcelain_commands
()
374 if [ -n "$__git_porcelain_commandlist" ]; then
375 echo "$__git_porcelain_commandlist"
379 for i
in "help" $
(__git_all_commands
)
382 *--*) : helper pattern
;;
383 applymbox
) : ask gittus
;;
384 applypatch
) : ask gittus
;;
385 archimport
) : import
;;
386 cat-file
) : plumbing
;;
387 check-attr
) : plumbing
;;
388 check-ref-format
) : plumbing
;;
389 checkout-index
) : plumbing
;;
390 commit-tree
) : plumbing
;;
391 count-objects
) : infrequent
;;
392 cvsexportcommit
) : export;;
393 cvsimport
) : import
;;
394 cvsserver
) : daemon
;;
396 diff-files
) : plumbing
;;
397 diff-index
) : plumbing
;;
398 diff-tree
) : plumbing
;;
399 fast-import
) : import
;;
400 fast-export
) : export;;
401 fsck-objects
) : plumbing
;;
402 fetch-pack
) : plumbing
;;
403 fmt-merge-msg
) : plumbing
;;
404 for-each-ref
) : plumbing
;;
405 hash-object
) : plumbing
;;
406 http-
*) : transport
;;
407 index-pack
) : plumbing
;;
408 init-db
) : deprecated
;;
409 local-fetch
) : plumbing
;;
410 lost-found
) : infrequent
;;
411 ls-files
) : plumbing
;;
412 ls-remote
) : plumbing
;;
413 ls-tree
) : plumbing
;;
414 mailinfo
) : plumbing
;;
415 mailsplit
) : plumbing
;;
416 merge-
*) : plumbing
;;
419 pack-objects
) : plumbing
;;
420 pack-redundant
) : plumbing
;;
421 pack-refs
) : plumbing
;;
422 parse-remote
) : plumbing
;;
423 patch-id
) : plumbing
;;
424 peek-remote
) : plumbing
;;
426 prune-packed
) : plumbing
;;
427 quiltimport
) : import
;;
428 read-tree
) : plumbing
;;
429 receive-pack
) : plumbing
;;
431 repo-config
) : deprecated
;;
433 rev-list
) : plumbing
;;
434 rev-parse
) : plumbing
;;
435 runstatus
) : plumbing
;;
436 sh-setup
) : internal
;;
438 show-ref
) : plumbing
;;
439 send-pack
) : plumbing
;;
440 show-index
) : plumbing
;;
442 stripspace
) : plumbing
;;
443 symbolic-ref
) : plumbing
;;
444 tar-tree
) : deprecated
;;
445 unpack-file
) : plumbing
;;
446 unpack-objects
) : plumbing
;;
447 update-index
) : plumbing
;;
448 update-ref
) : plumbing
;;
449 update-server-info
) : daemon
;;
450 upload-archive
) : plumbing
;;
451 upload-pack
) : plumbing
;;
452 write-tree
) : plumbing
;;
454 verify-pack
) : infrequent
;;
455 verify-tag
) : plumbing
;;
460 __git_porcelain_commandlist
=
461 __git_porcelain_commandlist
="$(__git_porcelain_commands 2>/dev/null)"
466 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
476 __git_aliased_command
()
478 local word cmdline
=$
(git
--git-dir="$(__gitdir)" \
479 config
--get "alias.$1")
480 for word
in $cmdline; do
481 if [ "${word##-*}" ]; then
488 __git_find_subcommand
()
490 local word subcommand c
=1
492 while [ $c -lt $COMP_CWORD ]; do
493 word
="${COMP_WORDS[c]}"
494 for subcommand
in $1; do
495 if [ "$subcommand" = "$word" ]; then
504 __git_has_doubledash
()
507 while [ $c -lt $COMP_CWORD ]; do
508 if [ "--" = "${COMP_WORDS[c]}" ]; then
516 __git_whitespacelist
="nowarn warn error error-all fix"
520 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
521 if [ -d "$dir"/rebase-apply
]; then
522 __gitcomp
"--skip --resolved --abort"
527 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
532 --signoff --utf8 --binary --3way --interactive
542 local cur
="${COMP_WORDS[COMP_CWORD]}"
545 __gitcomp
"$__git_whitespacelist" "" "${cur##--whitespace=}"
550 --stat --numstat --summary --check --index
551 --cached --index-info --reverse --reject --unidiff-zero
552 --apply --no-add --exclude=
553 --whitespace= --inaccurate-eof --verbose
562 __git_has_doubledash
&& return
564 local cur
="${COMP_WORDS[COMP_CWORD]}"
568 --interactive --refresh --patch --update --dry-run
578 local cur
="${COMP_WORDS[COMP_CWORD]}"
581 __gitcomp
"$(git archive --list)" "" "${cur##--format=}"
585 __gitcomp
"$(__git_remotes)" "" "${cur##--remote=}"
590 --format= --list --verbose
591 --prefix= --remote= --exec=
601 __git_has_doubledash
&& return
603 local subcommands
="start bad good skip reset visualize replay log run"
604 local subcommand
="$(__git_find_subcommand "$subcommands")"
605 if [ -z "$subcommand" ]; then
606 __gitcomp
"$subcommands"
610 case "$subcommand" in
612 __gitcomp
"$(__git_refs)"
622 local i c
=1 only_local_ref
="n" has_r
="n"
624 while [ $c -lt $COMP_CWORD ]; do
627 -d|
-m) only_local_ref
="y" ;;
633 case "${COMP_WORDS[COMP_CWORD]}" in
634 --*=*) COMPREPLY
=() ;;
637 --color --no-color --verbose --abbrev= --no-abbrev
638 --track --no-track --contains --merged --no-merged
642 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
643 __gitcomp
"$(__git_heads)"
645 __gitcomp
"$(__git_refs)"
653 local cmd
="${COMP_WORDS[2]}"
654 case "$COMP_CWORD" in
656 __gitcomp
"create list-heads verify unbundle"
664 __git_complete_revlist
673 __git_has_doubledash
&& return
675 __gitcomp
"$(__git_refs)"
680 __gitcomp
"$(__git_refs)"
685 local cur
="${COMP_WORDS[COMP_CWORD]}"
688 __gitcomp
"--edit --no-commit"
691 __gitcomp
"$(__git_refs)"
698 __git_has_doubledash
&& return
700 local cur
="${COMP_WORDS[COMP_CWORD]}"
703 __gitcomp
"--dry-run --quiet"
712 local cur
="${COMP_WORDS[COMP_CWORD]}"
737 __git_has_doubledash
&& return
739 local cur
="${COMP_WORDS[COMP_CWORD]}"
743 --all --author= --signoff --verify --no-verify
744 --edit --amend --include --only --interactive
753 local cur
="${COMP_WORDS[COMP_CWORD]}"
757 --all --tags --contains --abbrev= --candidates=
758 --exact-match --debug --long --match --always
762 __gitcomp
"$(__git_refs)"
767 __git_has_doubledash
&& return
769 local cur
="${COMP_WORDS[COMP_CWORD]}"
772 __gitcomp
"--cached --stat --numstat --shortstat --summary
773 --patch-with-stat --name-only --name-status --color
774 --no-color --color-words --no-renames --check
775 --full-index --binary --abbrev --diff-filter=
776 --find-copies-harder --pickaxe-all --pickaxe-regex
777 --text --ignore-space-at-eol --ignore-space-change
778 --ignore-all-space --exit-code --quiet --ext-diff
780 --no-prefix --src-prefix= --dst-prefix=
781 --base --ours --theirs
791 local cur
="${COMP_WORDS[COMP_CWORD]}"
793 if [ "$COMP_CWORD" = 2 ]; then
794 __gitcomp
"$(__git_remotes)"
799 case "$COMP_WORDBREAKS" in
801 *) pfx
="${cur%%:*}:" ;;
803 __gitcomp
"$(__git_refs)" "$pfx" "${cur#*:}"
806 __gitcomp
"$(__git_refs2 "${COMP_WORDS[2]}")"
814 local cur
="${COMP_WORDS[COMP_CWORD]}"
818 --stdout --attach --thread
820 --numbered --start-number
825 --full-index --binary
828 --no-prefix --src-prefix= --dst-prefix=
833 __git_complete_revlist
838 local cur
="${COMP_WORDS[COMP_CWORD]}"
841 __gitcomp
"--prune --aggressive"
850 __git_has_doubledash
&& return
852 local cur
="${COMP_WORDS[COMP_CWORD]}"
857 --text --ignore-case --word-regexp --invert-match
859 --extended-regexp --basic-regexp --fixed-strings
860 --files-with-matches --name-only
861 --files-without-match
863 --and --or --not --all-match
873 local cur
="${COMP_WORDS[COMP_CWORD]}"
876 __gitcomp
"--all --info --man --web"
880 __gitcomp
"$(__git_all_commands)
881 attributes cli core-tutorial cvs-migration
882 diffcore gitk glossary hooks ignore modules
883 repository-layout tutorial tutorial-2
889 local cur
="${COMP_WORDS[COMP_CWORD]}"
893 false true umask group all world everybody
894 " "" "${cur##--shared=}"
898 __gitcomp
"--quiet --bare --template= --shared --shared="
907 __git_has_doubledash
&& return
909 local cur
="${COMP_WORDS[COMP_CWORD]}"
912 __gitcomp
"--cached --deleted --modified --others --ignored
913 --stage --directory --no-empty-directory --unmerged
914 --killed --exclude= --exclude-from=
915 --exclude-per-directory= --exclude-standard
916 --error-unmatch --with-tree= --full-name
917 --abbrev --ignored --exclude-per-directory
927 __gitcomp
"$(__git_remotes)"
937 __git_has_doubledash
&& return
939 local cur
="${COMP_WORDS[COMP_CWORD]}"
940 local g
="$(git rev-parse --git-dir 2>/dev/null)"
942 if [ -f "$g/MERGE_HEAD" ]; then
948 oneline short medium full fuller email raw
949 " "" "${cur##--pretty=}"
954 relative iso8601 rfc2822 short local default
955 " "" "${cur##--date=}"
960 --max-count= --max-age= --since= --after=
961 --min-age= --before= --until=
962 --root --topo-order --date-order --reverse
964 --abbrev-commit --abbrev=
965 --relative-date --date=
966 --author= --committer= --grep=
968 --pretty= --name-status --name-only --raw
970 --left-right --cherry-pick
972 --stat --numstat --shortstat
973 --decorate --diff-filter=
974 --color-words --walk-reflogs
975 --parents --children --full-history
981 __git_complete_revlist
986 local cur
="${COMP_WORDS[COMP_CWORD]}"
987 case "${COMP_WORDS[COMP_CWORD-1]}" in
989 __gitcomp
"$(__git_merge_strategies)"
994 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
999 --no-commit --no-stat --log --no-log --squash --strategy
1003 __gitcomp
"$(__git_refs)"
1008 local cur
="${COMP_WORDS[COMP_CWORD]}"
1012 kdiff3 tkdiff meld xxdiff emerge
1013 vimdiff gvimdiff ecmerge opendiff
1014 " "" "${cur##--tool=}"
1027 __gitcomp
"$(__git_refs)"
1032 local cur
="${COMP_WORDS[COMP_CWORD]}"
1035 __gitcomp
"--dry-run"
1044 __gitcomp
"--tags --all --stdin"
1049 local cur
="${COMP_WORDS[COMP_CWORD]}"
1051 if [ "$COMP_CWORD" = 2 ]; then
1052 __gitcomp
"$(__git_remotes)"
1054 __gitcomp
"$(__git_refs "${COMP_WORDS[2]}")"
1060 local cur
="${COMP_WORDS[COMP_CWORD]}"
1062 if [ "$COMP_CWORD" = 2 ]; then
1063 __gitcomp
"$(__git_remotes)"
1068 case "$COMP_WORDBREAKS" in
1070 *) pfx
="${cur%%:*}:" ;;
1073 __gitcomp
"$(__git_refs "${COMP_WORDS[2]}")" "$pfx" "${cur#*:}"
1076 __gitcomp
"$(__git_refs)" + "${cur#+}"
1079 __gitcomp
"$(__git_refs)"
1087 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
1088 if [ -d "$dir"/rebase-apply
] ||
[ -d "$dir"/rebase-merge
]; then
1089 __gitcomp
"--continue --skip --abort"
1092 case "${COMP_WORDS[COMP_CWORD-1]}" in
1094 __gitcomp
"$(__git_merge_strategies)"
1099 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
1103 __gitcomp
"--onto --merge --strategy --interactive"
1106 __gitcomp
"$(__git_refs)"
1111 local cur
="${COMP_WORDS[COMP_CWORD]}"
1114 __gitcomp
"--bcc --cc --cc-cmd --chain-reply-to --compose
1115 --dry-run --envelope-sender --from --identity
1116 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1117 --no-suppress-from --no-thread --quiet
1118 --signed-off-by-cc --smtp-pass --smtp-server
1119 --smtp-server-port --smtp-ssl --smtp-user --subject
1120 --suppress-cc --suppress-from --thread --to"
1129 local cur
="${COMP_WORDS[COMP_CWORD]}"
1130 local prv
="${COMP_WORDS[COMP_CWORD-1]}"
1133 __gitcomp
"$(__git_remotes)"
1137 __gitcomp
"$(__git_refs)"
1141 local remote
="${prv#remote.}"
1142 remote
="${remote%.fetch}"
1143 __gitcomp
"$(__git_refs_remotes "$remote")"
1147 local remote
="${prv#remote.}"
1148 remote
="${remote%.push}"
1149 __gitcomp
"$(git --git-dir="$
(__gitdir
)" \
1150 for-each-ref --format='%(refname):%(refname)' \
1154 pull.twohead|pull.octopus
)
1155 __gitcomp
"$(__git_merge_strategies)"
1158 color.branch|color.
diff|color.status
)
1159 __gitcomp
"always never auto"
1164 black red green yellow blue magenta cyan white
1165 bold dim ul blink reverse
1177 --global --system --file=
1178 --list --replace-all
1179 --get --get-all --get-regexp
1180 --add --unset --unset-all
1181 --remove-section --rename-section
1186 local pfx
="${cur%.*}."
1188 __gitcomp
"remote merge" "$pfx" "$cur"
1192 local pfx
="${cur%.*}."
1194 __gitcomp
"$(__git_heads)" "$pfx" "$cur" "."
1198 local pfx
="${cur%.*}."
1201 url fetch push skipDefaultUpdate
1202 receivepack uploadpack tagopt
1207 local pfx
="${cur%.*}."
1209 __gitcomp
"$(__git_remotes)" "$pfx" "$cur" "."
1218 core.preferSymlinkRefs
1219 core.logAllRefUpdates
1220 core.loosecompression
1221 core.repositoryFormatVersion
1222 core.sharedRepository
1223 core.warnAmbiguousRefs
1225 core.packedGitWindowSize
1229 color.branch.current
1240 color.diff.whitespace
1245 color.status.changed
1246 color.status.untracked
1251 format.subjectprefix
1255 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
1256 gitcvs.dbtablenameprefix
1259 gc.reflogexpireunreachable
1272 i18n.logOutputEncoding
1282 pack.deltaCacheLimit
1285 repack.useDeltaBaseOffset
1288 transfer.unpackLimit
1290 receive.denyNonFastForwards
1300 local subcommands
="add rm show prune update"
1301 local subcommand
="$(__git_find_subcommand "$subcommands")"
1302 if [ -z "$subcommand" ]; then
1303 __gitcomp
"$subcommands"
1307 case "$subcommand" in
1309 __gitcomp
"$(__git_remotes)"
1312 local i c
='' IFS
=$
'\n'
1313 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
1331 __git_has_doubledash
&& return
1333 local cur
="${COMP_WORDS[COMP_CWORD]}"
1336 __gitcomp
"--mixed --hard --soft"
1340 __gitcomp
"$(__git_refs)"
1345 local cur
="${COMP_WORDS[COMP_CWORD]}"
1348 __gitcomp
"--edit --mainline --no-edit --no-commit --signoff"
1352 __gitcomp
"$(__git_refs)"
1357 __git_has_doubledash
&& return
1359 local cur
="${COMP_WORDS[COMP_CWORD]}"
1362 __gitcomp
"--cached --dry-run --ignore-unmatch --quiet"
1371 __git_has_doubledash
&& return
1373 local cur
="${COMP_WORDS[COMP_CWORD]}"
1377 --max-count= --max-age= --since= --after=
1378 --min-age= --before= --until=
1380 --author= --committer= --grep=
1383 --numbered --summary
1388 __git_complete_revlist
1393 __git_has_doubledash
&& return
1395 local cur
="${COMP_WORDS[COMP_CWORD]}"
1399 oneline short medium full fuller email raw
1400 " "" "${cur##--pretty=}"
1404 __gitcomp
"--pretty="
1413 local cur
="${COMP_WORDS[COMP_CWORD]}"
1417 --all --remotes --topo-order --current --more=
1418 --list --independent --merge-base --no-name
1419 --sha1-name --topics --reflog
1424 __git_complete_revlist
1429 local subcommands
='save list show apply clear drop pop create branch'
1430 local subcommand
="$(__git_find_subcommand "$subcommands")"
1431 if [ -z "$subcommand" ]; then
1432 __gitcomp
"$subcommands"
1434 local cur
="${COMP_WORDS[COMP_CWORD]}"
1435 case "$subcommand,$cur" in
1437 __gitcomp
"--keep-index"
1442 show
,--*|drop
,--*|pop
,--*|branch
,--*)
1445 show
,*|apply
,*|drop
,*|pop
,*|branch
,*)
1446 __gitcomp
"$(git --git-dir="$
(__gitdir
)" stash list \
1447 | sed -n -e 's/:.*//p')"
1458 __git_has_doubledash
&& return
1460 local subcommands
="add status init update"
1461 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1462 local cur
="${COMP_WORDS[COMP_CWORD]}"
1465 __gitcomp
"--quiet --cached"
1468 __gitcomp
"$subcommands"
1478 init fetch clone rebase dcommit log find-rev
1479 set-tree commit-diff info create-ignore propget
1480 proplist show-ignore show-externals
1482 local subcommand
="$(__git_find_subcommand "$subcommands")"
1483 if [ -z "$subcommand" ]; then
1484 __gitcomp
"$subcommands"
1486 local remote_opts
="--username= --config-dir= --no-auth-cache"
1488 --follow-parent --authors-file= --repack=
1489 --no-metadata --use-svm-props --use-svnsync-props
1490 --log-window-size= --no-checkout --quiet
1491 --repack-flags --user-log-author $remote_opts
1494 --template= --shared= --trunk= --tags=
1495 --branches= --stdlayout --minimize-url
1496 --no-metadata --use-svm-props --use-svnsync-props
1497 --rewrite-root= $remote_opts
1500 --edit --rmdir --find-copies-harder --copy-similarity=
1503 local cur
="${COMP_WORDS[COMP_CWORD]}"
1504 case "$subcommand,$cur" in
1506 __gitcomp
"--revision= --fetch-all $fc_opts"
1509 __gitcomp
"--revision= $fc_opts $init_opts"
1512 __gitcomp
"$init_opts"
1516 --merge --strategy= --verbose --dry-run
1517 --fetch-all --no-rebase $cmt_opts $fc_opts
1521 __gitcomp
"--stdin $cmt_opts $fc_opts"
1523 create-ignore
,--*|propget
,--*|proplist
,--*|show-ignore
,--*|\
1525 __gitcomp
"--revision="
1529 --limit= --revision= --verbose --incremental
1530 --oneline --show-commit --non-recursive
1536 --merge --verbose --strategy= --local
1537 --fetch-all $fc_opts
1541 __gitcomp
"--message= --file= --revision= $cmt_opts"
1556 while [ $c -lt $COMP_CWORD ]; do
1557 i
="${COMP_WORDS[c]}"
1560 __gitcomp
"$(__git_tags)"
1570 case "${COMP_WORDS[COMP_CWORD-1]}" in
1576 __gitcomp
"$(__git_tags)"
1582 __gitcomp
"$(__git_refs)"
1589 local i c
=1 command __git_dir
1591 while [ $c -lt $COMP_CWORD ]; do
1592 i
="${COMP_WORDS[c]}"
1594 --git-dir=*) __git_dir
="${i#--git-dir=}" ;;
1595 --bare) __git_dir
="." ;;
1596 --version|
-p|
--paginate) ;;
1597 --help) command="help"; break ;;
1598 *) command="$i"; break ;;
1603 if [ -z "$command" ]; then
1604 case "${COMP_WORDS[COMP_CWORD]}" in
1605 --*=*) COMPREPLY
=() ;;
1617 *) __gitcomp
"$(__git_porcelain_commands) $(__git_aliases)" ;;
1622 local expansion
=$
(__git_aliased_command
"$command")
1623 [ "$expansion" ] && command="$expansion"
1628 apply
) _git_apply
;;
1629 archive
) _git_archive
;;
1630 bisect
) _git_bisect
;;
1631 bundle
) _git_bundle
;;
1632 branch
) _git_branch
;;
1633 checkout
) _git_checkout
;;
1634 cherry
) _git_cherry
;;
1635 cherry-pick
) _git_cherry_pick
;;
1636 clean
) _git_clean
;;
1637 clone
) _git_clone
;;
1638 commit
) _git_commit
;;
1639 config
) _git_config
;;
1640 describe
) _git_describe
;;
1642 fetch
) _git_fetch
;;
1643 format-patch
) _git_format_patch
;;
1649 ls-files
) _git_ls_files
;;
1650 ls-remote
) _git_ls_remote
;;
1651 ls-tree
) _git_ls_tree
;;
1653 mergetool
) _git_mergetool
;;
1654 merge-base
) _git_merge_base
;;
1656 name-rev
) _git_name_rev
;;
1659 rebase
) _git_rebase
;;
1660 remote
) _git_remote
;;
1661 reset) _git_reset
;;
1662 revert
) _git_revert
;;
1664 send-email
) _git_send_email
;;
1665 shortlog
) _git_shortlog
;;
1667 show-branch
) _git_show_branch
;;
1668 stash
) _git_stash
;;
1669 submodule
) _git_submodule
;;
1672 whatchanged
) _git_log
;;
1679 __git_has_doubledash
&& return
1681 local cur
="${COMP_WORDS[COMP_CWORD]}"
1682 local g
="$(git rev-parse --git-dir 2>/dev/null)"
1684 if [ -f "$g/MERGE_HEAD" ]; then
1689 __gitcomp
"--not --all $merge"
1693 __git_complete_revlist
1696 complete
-o default
-o nospace
-F _git git
1697 complete
-o default
-o nospace
-F _gitk gitk
1699 # The following are necessary only for Cygwin, and only are needed
1700 # when the user has tab-completed the executable name and consequently
1701 # included the '.exe' suffix.
1703 if [ Cygwin
= "$(uname -o 2>/dev/null)" ]; then
1704 complete
-o default
-o nospace
-F _git git.exe