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 mycword
="$COMP_CWORD"
654 case "${COMP_WORDS[0]}" in
656 local cmd
="${COMP_WORDS[2]}"
657 mycword
="$((mycword-1))"
660 local cmd
="${COMP_WORDS[1]}"
665 __gitcomp
"create list-heads verify unbundle"
673 __git_complete_revlist
682 __git_has_doubledash
&& return
684 __gitcomp
"$(__git_refs)"
689 __gitcomp
"$(__git_refs)"
694 local cur
="${COMP_WORDS[COMP_CWORD]}"
697 __gitcomp
"--edit --no-commit"
700 __gitcomp
"$(__git_refs)"
707 __git_has_doubledash
&& return
709 local cur
="${COMP_WORDS[COMP_CWORD]}"
712 __gitcomp
"--dry-run --quiet"
721 local cur
="${COMP_WORDS[COMP_CWORD]}"
746 __git_has_doubledash
&& return
748 local cur
="${COMP_WORDS[COMP_CWORD]}"
752 --all --author= --signoff --verify --no-verify
753 --edit --amend --include --only --interactive
762 local cur
="${COMP_WORDS[COMP_CWORD]}"
766 --all --tags --contains --abbrev= --candidates=
767 --exact-match --debug --long --match --always
771 __gitcomp
"$(__git_refs)"
776 __git_has_doubledash
&& return
778 local cur
="${COMP_WORDS[COMP_CWORD]}"
781 __gitcomp
"--cached --stat --numstat --shortstat --summary
782 --patch-with-stat --name-only --name-status --color
783 --no-color --color-words --no-renames --check
784 --full-index --binary --abbrev --diff-filter=
785 --find-copies-harder --pickaxe-all --pickaxe-regex
786 --text --ignore-space-at-eol --ignore-space-change
787 --ignore-all-space --exit-code --quiet --ext-diff
789 --no-prefix --src-prefix= --dst-prefix=
790 --base --ours --theirs
800 local cur
="${COMP_WORDS[COMP_CWORD]}"
802 if [ "$COMP_CWORD" = 2 ]; then
803 __gitcomp
"$(__git_remotes)"
808 case "$COMP_WORDBREAKS" in
810 *) pfx
="${cur%%:*}:" ;;
812 __gitcomp
"$(__git_refs)" "$pfx" "${cur#*:}"
816 case "${COMP_WORDS[0]}" in
817 git-fetch
) remote
="${COMP_WORDS[1]}" ;;
818 git
) remote
="${COMP_WORDS[2]}" ;;
820 __gitcomp
"$(__git_refs2 "$remote")"
828 local cur
="${COMP_WORDS[COMP_CWORD]}"
832 --stdout --attach --thread
834 --numbered --start-number
839 --full-index --binary
842 --no-prefix --src-prefix= --dst-prefix=
847 __git_complete_revlist
852 local cur
="${COMP_WORDS[COMP_CWORD]}"
855 __gitcomp
"--prune --aggressive"
864 __git_has_doubledash
&& return
866 local cur
="${COMP_WORDS[COMP_CWORD]}"
871 --text --ignore-case --word-regexp --invert-match
873 --extended-regexp --basic-regexp --fixed-strings
874 --files-with-matches --name-only
875 --files-without-match
877 --and --or --not --all-match
887 local cur
="${COMP_WORDS[COMP_CWORD]}"
890 __gitcomp
"--all --info --man --web"
894 __gitcomp
"$(__git_all_commands)
895 attributes cli core-tutorial cvs-migration
896 diffcore gitk glossary hooks ignore modules
897 repository-layout tutorial tutorial-2
903 local cur
="${COMP_WORDS[COMP_CWORD]}"
907 false true umask group all world everybody
908 " "" "${cur##--shared=}"
912 __gitcomp
"--quiet --bare --template= --shared --shared="
921 __git_has_doubledash
&& return
923 local cur
="${COMP_WORDS[COMP_CWORD]}"
926 __gitcomp
"--cached --deleted --modified --others --ignored
927 --stage --directory --no-empty-directory --unmerged
928 --killed --exclude= --exclude-from=
929 --exclude-per-directory= --exclude-standard
930 --error-unmatch --with-tree= --full-name
931 --abbrev --ignored --exclude-per-directory
941 __gitcomp
"$(__git_remotes)"
951 __git_has_doubledash
&& return
953 local cur
="${COMP_WORDS[COMP_CWORD]}"
957 oneline short medium full fuller email raw
958 " "" "${cur##--pretty=}"
963 relative iso8601 rfc2822 short local default
964 " "" "${cur##--date=}"
969 --max-count= --max-age= --since= --after=
970 --min-age= --before= --until=
971 --root --topo-order --date-order --reverse
973 --abbrev-commit --abbrev=
974 --relative-date --date=
975 --author= --committer= --grep=
977 --pretty= --name-status --name-only --raw
979 --left-right --cherry-pick
981 --stat --numstat --shortstat
982 --decorate --diff-filter=
983 --color-words --walk-reflogs
984 --parents --children --full-history
990 __git_complete_revlist
995 local cur
="${COMP_WORDS[COMP_CWORD]}"
996 case "${COMP_WORDS[COMP_CWORD-1]}" in
998 __gitcomp
"$(__git_merge_strategies)"
1003 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
1008 --no-commit --no-stat --log --no-log --squash --strategy
1012 __gitcomp
"$(__git_refs)"
1017 local cur
="${COMP_WORDS[COMP_CWORD]}"
1021 kdiff3 tkdiff meld xxdiff emerge
1022 vimdiff gvimdiff ecmerge opendiff
1023 " "" "${cur##--tool=}"
1036 __gitcomp
"$(__git_refs)"
1041 local cur
="${COMP_WORDS[COMP_CWORD]}"
1044 __gitcomp
"--dry-run"
1053 __gitcomp
"--tags --all --stdin"
1058 local cur
="${COMP_WORDS[COMP_CWORD]}"
1060 if [ "$COMP_CWORD" = 2 ]; then
1061 __gitcomp
"$(__git_remotes)"
1064 case "${COMP_WORDS[0]}" in
1065 git-pull
) remote
="${COMP_WORDS[1]}" ;;
1066 git
) remote
="${COMP_WORDS[2]}" ;;
1068 __gitcomp
"$(__git_refs "$remote")"
1074 local cur
="${COMP_WORDS[COMP_CWORD]}"
1076 if [ "$COMP_CWORD" = 2 ]; then
1077 __gitcomp
"$(__git_remotes)"
1082 case "${COMP_WORDS[0]}" in
1083 git-push
) remote
="${COMP_WORDS[1]}" ;;
1084 git
) remote
="${COMP_WORDS[2]}" ;;
1088 case "$COMP_WORDBREAKS" in
1090 *) pfx
="${cur%%:*}:" ;;
1093 __gitcomp
"$(__git_refs "$remote")" "$pfx" "${cur#*:}"
1096 __gitcomp
"$(__git_refs)" + "${cur#+}"
1099 __gitcomp
"$(__git_refs)"
1107 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
1108 if [ -d "$dir"/rebase-apply
] ||
[ -d "$dir"/rebase-merge
]; then
1109 __gitcomp
"--continue --skip --abort"
1112 case "${COMP_WORDS[COMP_CWORD-1]}" in
1114 __gitcomp
"$(__git_merge_strategies)"
1119 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
1123 __gitcomp
"--onto --merge --strategy --interactive"
1126 __gitcomp
"$(__git_refs)"
1131 local cur
="${COMP_WORDS[COMP_CWORD]}"
1134 __gitcomp
"--bcc --cc --cc-cmd --chain-reply-to --compose
1135 --dry-run --envelope-sender --from --identity
1136 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1137 --no-suppress-from --no-thread --quiet
1138 --signed-off-by-cc --smtp-pass --smtp-server
1139 --smtp-server-port --smtp-ssl --smtp-user --subject
1140 --suppress-cc --suppress-from --thread --to"
1149 local cur
="${COMP_WORDS[COMP_CWORD]}"
1150 local prv
="${COMP_WORDS[COMP_CWORD-1]}"
1153 __gitcomp
"$(__git_remotes)"
1157 __gitcomp
"$(__git_refs)"
1161 local remote
="${prv#remote.}"
1162 remote
="${remote%.fetch}"
1163 __gitcomp
"$(__git_refs_remotes "$remote")"
1167 local remote
="${prv#remote.}"
1168 remote
="${remote%.push}"
1169 __gitcomp
"$(git --git-dir="$
(__gitdir
)" \
1170 for-each-ref --format='%(refname):%(refname)' \
1174 pull.twohead|pull.octopus
)
1175 __gitcomp
"$(__git_merge_strategies)"
1178 color.branch|color.
diff|color.status
)
1179 __gitcomp
"always never auto"
1184 black red green yellow blue magenta cyan white
1185 bold dim ul blink reverse
1197 --global --system --file=
1198 --list --replace-all
1199 --get --get-all --get-regexp
1200 --add --unset --unset-all
1201 --remove-section --rename-section
1206 local pfx
="${cur%.*}."
1208 __gitcomp
"remote merge" "$pfx" "$cur"
1212 local pfx
="${cur%.*}."
1214 __gitcomp
"$(__git_heads)" "$pfx" "$cur" "."
1218 local pfx
="${cur%.*}."
1221 url fetch push skipDefaultUpdate
1222 receivepack uploadpack tagopt
1227 local pfx
="${cur%.*}."
1229 __gitcomp
"$(__git_remotes)" "$pfx" "$cur" "."
1238 core.preferSymlinkRefs
1239 core.logAllRefUpdates
1240 core.loosecompression
1241 core.repositoryFormatVersion
1242 core.sharedRepository
1243 core.warnAmbiguousRefs
1245 core.packedGitWindowSize
1249 color.branch.current
1260 color.diff.whitespace
1265 color.status.changed
1266 color.status.untracked
1271 format.subjectprefix
1275 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
1276 gitcvs.dbtablenameprefix
1279 gc.reflogexpireunreachable
1292 i18n.logOutputEncoding
1302 pack.deltaCacheLimit
1305 repack.useDeltaBaseOffset
1308 transfer.unpackLimit
1310 receive.denyNonFastForwards
1320 local subcommands
="add rm show prune update"
1321 local subcommand
="$(__git_find_subcommand "$subcommands")"
1322 if [ -z "$subcommand" ]; then
1323 __gitcomp
"$subcommands"
1327 case "$subcommand" in
1329 __gitcomp
"$(__git_remotes)"
1332 local i c
='' IFS
=$
'\n'
1333 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
1351 __git_has_doubledash
&& return
1353 local cur
="${COMP_WORDS[COMP_CWORD]}"
1356 __gitcomp
"--mixed --hard --soft"
1360 __gitcomp
"$(__git_refs)"
1365 local cur
="${COMP_WORDS[COMP_CWORD]}"
1368 __gitcomp
"--edit --mainline --no-edit --no-commit --signoff"
1377 __git_has_doubledash
&& return
1379 local cur
="${COMP_WORDS[COMP_CWORD]}"
1382 __gitcomp
"--cached --dry-run --ignore-unmatch --quiet"
1391 __git_has_doubledash
&& return
1393 local cur
="${COMP_WORDS[COMP_CWORD]}"
1397 --max-count= --max-age= --since= --after=
1398 --min-age= --before= --until=
1400 --author= --committer= --grep=
1403 --numbered --summary
1408 __git_complete_revlist
1413 __git_has_doubledash
&& return
1415 local cur
="${COMP_WORDS[COMP_CWORD]}"
1419 oneline short medium full fuller email raw
1420 " "" "${cur##--pretty=}"
1424 __gitcomp
"--pretty="
1433 local cur
="${COMP_WORDS[COMP_CWORD]}"
1437 --all --remotes --topo-order --current --more=
1438 --list --independent --merge-base --no-name
1439 --sha1-name --topics --reflog
1444 __git_complete_revlist
1449 local subcommands
='save list show apply clear drop pop create branch'
1450 local subcommand
="$(__git_find_subcommand "$subcommands")"
1451 if [ -z "$subcommand" ]; then
1452 __gitcomp
"$subcommands"
1454 local cur
="${COMP_WORDS[COMP_CWORD]}"
1455 case "$subcommand,$cur" in
1457 __gitcomp
"--keep-index"
1462 show
,--*|drop
,--*|pop
,--*|branch
,--*)
1465 show
,*|apply
,*|drop
,*|pop
,*|branch
,*)
1466 __gitcomp
"$(git --git-dir="$
(__gitdir
)" stash list \
1467 | sed -n -e 's/:.*//p')"
1478 __git_has_doubledash
&& return
1480 local subcommands
="add status init update"
1481 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1482 local cur
="${COMP_WORDS[COMP_CWORD]}"
1485 __gitcomp
"--quiet --cached"
1488 __gitcomp
"$subcommands"
1498 init fetch clone rebase dcommit log find-rev
1499 set-tree commit-diff info create-ignore propget
1500 proplist show-ignore show-externals
1502 local subcommand
="$(__git_find_subcommand "$subcommands")"
1503 if [ -z "$subcommand" ]; then
1504 __gitcomp
"$subcommands"
1506 local remote_opts
="--username= --config-dir= --no-auth-cache"
1508 --follow-parent --authors-file= --repack=
1509 --no-metadata --use-svm-props --use-svnsync-props
1510 --log-window-size= --no-checkout --quiet
1511 --repack-flags --user-log-author $remote_opts
1514 --template= --shared= --trunk= --tags=
1515 --branches= --stdlayout --minimize-url
1516 --no-metadata --use-svm-props --use-svnsync-props
1517 --rewrite-root= $remote_opts
1520 --edit --rmdir --find-copies-harder --copy-similarity=
1523 local cur
="${COMP_WORDS[COMP_CWORD]}"
1524 case "$subcommand,$cur" in
1526 __gitcomp
"--revision= --fetch-all $fc_opts"
1529 __gitcomp
"--revision= $fc_opts $init_opts"
1532 __gitcomp
"$init_opts"
1536 --merge --strategy= --verbose --dry-run
1537 --fetch-all --no-rebase $cmt_opts $fc_opts
1541 __gitcomp
"--stdin $cmt_opts $fc_opts"
1543 create-ignore
,--*|propget
,--*|proplist
,--*|show-ignore
,--*|\
1545 __gitcomp
"--revision="
1549 --limit= --revision= --verbose --incremental
1550 --oneline --show-commit --non-recursive
1556 --merge --verbose --strategy= --local
1557 --fetch-all $fc_opts
1561 __gitcomp
"--message= --file= --revision= $cmt_opts"
1576 while [ $c -lt $COMP_CWORD ]; do
1577 i
="${COMP_WORDS[c]}"
1580 __gitcomp
"$(__git_tags)"
1590 case "${COMP_WORDS[COMP_CWORD-1]}" in
1596 __gitcomp
"$(__git_tags)"
1602 __gitcomp
"$(__git_refs)"
1609 local i c
=1 command __git_dir
1611 while [ $c -lt $COMP_CWORD ]; do
1612 i
="${COMP_WORDS[c]}"
1614 --git-dir=*) __git_dir
="${i#--git-dir=}" ;;
1615 --bare) __git_dir
="." ;;
1616 --version|
-p|
--paginate) ;;
1617 --help) command="help"; break ;;
1618 *) command="$i"; break ;;
1623 if [ -z "$command" ]; then
1624 case "${COMP_WORDS[COMP_CWORD]}" in
1625 --*=*) COMPREPLY
=() ;;
1637 *) __gitcomp
"$(__git_porcelain_commands) $(__git_aliases)" ;;
1642 local expansion
=$
(__git_aliased_command
"$command")
1643 [ "$expansion" ] && command="$expansion"
1648 apply
) _git_apply
;;
1649 archive
) _git_archive
;;
1650 bisect
) _git_bisect
;;
1651 bundle
) _git_bundle
;;
1652 branch
) _git_branch
;;
1653 checkout
) _git_checkout
;;
1654 cherry
) _git_cherry
;;
1655 cherry-pick
) _git_cherry_pick
;;
1656 clean
) _git_clean
;;
1657 clone
) _git_clone
;;
1658 commit
) _git_commit
;;
1659 config
) _git_config
;;
1660 describe
) _git_describe
;;
1662 fetch
) _git_fetch
;;
1663 format-patch
) _git_format_patch
;;
1669 ls-files
) _git_ls_files
;;
1670 ls-remote
) _git_ls_remote
;;
1671 ls-tree
) _git_ls_tree
;;
1673 mergetool
) _git_mergetool
;;
1674 merge-base
) _git_merge_base
;;
1676 name-rev
) _git_name_rev
;;
1679 rebase
) _git_rebase
;;
1680 remote
) _git_remote
;;
1681 reset) _git_reset
;;
1682 revert
) _git_revert
;;
1684 send-email
) _git_send_email
;;
1685 shortlog
) _git_shortlog
;;
1687 show-branch
) _git_show_branch
;;
1688 stash
) _git_stash
;;
1689 submodule
) _git_submodule
;;
1692 whatchanged
) _git_log
;;
1699 __git_has_doubledash
&& return
1701 local cur
="${COMP_WORDS[COMP_CWORD]}"
1702 local g
="$(git rev-parse --git-dir 2>/dev/null)"
1704 if [ -f $g/MERGE_HEAD
]; then
1709 __gitcomp
"--not --all $merge"
1713 __git_complete_revlist
1716 complete
-o default
-o nospace
-F _git git
1717 complete
-o default
-o nospace
-F _gitk gitk
1719 # The following are necessary only for Cygwin, and only are needed
1720 # when the user has tab-completed the executable name and consequently
1721 # included the '.exe' suffix.
1723 if [ Cygwin
= "$(uname -o 2>/dev/null)" ]; then
1724 complete
-o default
-o nospace
-F _git git.exe