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 case "${COMP_WORDS[0]},$COMP_CWORD" in
804 __gitcomp
"$(__git_remotes)"
807 __gitcomp
"$(__git_remotes)"
813 case "$COMP_WORDBREAKS" in
815 *) pfx
="${cur%%:*}:" ;;
817 __gitcomp
"$(__git_refs)" "$pfx" "${cur#*:}"
821 case "${COMP_WORDS[0]}" in
822 git-fetch
) remote
="${COMP_WORDS[1]}" ;;
823 git
) remote
="${COMP_WORDS[2]}" ;;
825 __gitcomp
"$(__git_refs2 "$remote")"
834 local cur
="${COMP_WORDS[COMP_CWORD]}"
838 --stdout --attach --thread
840 --numbered --start-number
845 --full-index --binary
848 --no-prefix --src-prefix= --dst-prefix=
853 __git_complete_revlist
858 local cur
="${COMP_WORDS[COMP_CWORD]}"
861 __gitcomp
"--prune --aggressive"
870 __git_has_doubledash
&& return
872 local cur
="${COMP_WORDS[COMP_CWORD]}"
877 --text --ignore-case --word-regexp --invert-match
879 --extended-regexp --basic-regexp --fixed-strings
880 --files-with-matches --name-only
881 --files-without-match
883 --and --or --not --all-match
893 local cur
="${COMP_WORDS[COMP_CWORD]}"
896 __gitcomp
"--all --info --man --web"
900 __gitcomp
"$(__git_all_commands)
901 attributes cli core-tutorial cvs-migration
902 diffcore gitk glossary hooks ignore modules
903 repository-layout tutorial tutorial-2
909 local cur
="${COMP_WORDS[COMP_CWORD]}"
913 false true umask group all world everybody
914 " "" "${cur##--shared=}"
918 __gitcomp
"--quiet --bare --template= --shared --shared="
927 __git_has_doubledash
&& return
929 local cur
="${COMP_WORDS[COMP_CWORD]}"
932 __gitcomp
"--cached --deleted --modified --others --ignored
933 --stage --directory --no-empty-directory --unmerged
934 --killed --exclude= --exclude-from=
935 --exclude-per-directory= --exclude-standard
936 --error-unmatch --with-tree= --full-name
937 --abbrev --ignored --exclude-per-directory
947 __gitcomp
"$(__git_remotes)"
957 __git_has_doubledash
&& return
959 local cur
="${COMP_WORDS[COMP_CWORD]}"
963 oneline short medium full fuller email raw
964 " "" "${cur##--pretty=}"
969 relative iso8601 rfc2822 short local default
970 " "" "${cur##--date=}"
975 --max-count= --max-age= --since= --after=
976 --min-age= --before= --until=
977 --root --topo-order --date-order --reverse
979 --abbrev-commit --abbrev=
980 --relative-date --date=
981 --author= --committer= --grep=
983 --pretty= --name-status --name-only --raw
985 --left-right --cherry-pick
987 --stat --numstat --shortstat
988 --decorate --diff-filter=
989 --color-words --walk-reflogs
990 --parents --children --full-history
996 __git_complete_revlist
1001 local cur
="${COMP_WORDS[COMP_CWORD]}"
1002 case "${COMP_WORDS[COMP_CWORD-1]}" in
1004 __gitcomp
"$(__git_merge_strategies)"
1009 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
1014 --no-commit --no-stat --log --no-log --squash --strategy
1018 __gitcomp
"$(__git_refs)"
1023 local cur
="${COMP_WORDS[COMP_CWORD]}"
1027 kdiff3 tkdiff meld xxdiff emerge
1028 vimdiff gvimdiff ecmerge opendiff
1029 " "" "${cur##--tool=}"
1042 __gitcomp
"$(__git_refs)"
1047 local cur
="${COMP_WORDS[COMP_CWORD]}"
1050 __gitcomp
"--dry-run"
1059 __gitcomp
"--tags --all --stdin"
1064 local cur
="${COMP_WORDS[COMP_CWORD]}"
1066 case "${COMP_WORDS[0]},$COMP_CWORD" in
1068 __gitcomp
"$(__git_remotes)"
1071 __gitcomp
"$(__git_remotes)"
1075 case "${COMP_WORDS[0]}" in
1076 git-pull
) remote
="${COMP_WORDS[1]}" ;;
1077 git
) remote
="${COMP_WORDS[2]}" ;;
1079 __gitcomp
"$(__git_refs "$remote")"
1086 local cur
="${COMP_WORDS[COMP_CWORD]}"
1088 case "${COMP_WORDS[0]},$COMP_CWORD" in
1090 __gitcomp
"$(__git_remotes)"
1093 __gitcomp
"$(__git_remotes)"
1099 case "${COMP_WORDS[0]}" in
1100 git-push
) remote
="${COMP_WORDS[1]}" ;;
1101 git
) remote
="${COMP_WORDS[2]}" ;;
1105 case "$COMP_WORDBREAKS" in
1107 *) pfx
="${cur%%:*}:" ;;
1110 __gitcomp
"$(__git_refs "$remote")" "$pfx" "${cur#*:}"
1113 __gitcomp
"$(__git_refs)" + "${cur#+}"
1116 __gitcomp
"$(__git_refs)"
1125 local cur
="${COMP_WORDS[COMP_CWORD]}" dir
="$(__gitdir)"
1126 if [ -d "$dir"/rebase-apply
] ||
[ -d "$dir"/rebase-merge
]; then
1127 __gitcomp
"--continue --skip --abort"
1130 case "${COMP_WORDS[COMP_CWORD-1]}" in
1132 __gitcomp
"$(__git_merge_strategies)"
1137 __gitcomp
"$(__git_merge_strategies)" "" "${cur##--strategy=}"
1141 __gitcomp
"--onto --merge --strategy --interactive"
1144 __gitcomp
"$(__git_refs)"
1149 local cur
="${COMP_WORDS[COMP_CWORD]}"
1152 __gitcomp
"--bcc --cc --cc-cmd --chain-reply-to --compose
1153 --dry-run --envelope-sender --from --identity
1154 --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1155 --no-suppress-from --no-thread --quiet
1156 --signed-off-by-cc --smtp-pass --smtp-server
1157 --smtp-server-port --smtp-ssl --smtp-user --subject
1158 --suppress-cc --suppress-from --thread --to"
1167 local cur
="${COMP_WORDS[COMP_CWORD]}"
1168 local prv
="${COMP_WORDS[COMP_CWORD-1]}"
1171 __gitcomp
"$(__git_remotes)"
1175 __gitcomp
"$(__git_refs)"
1179 local remote
="${prv#remote.}"
1180 remote
="${remote%.fetch}"
1181 __gitcomp
"$(__git_refs_remotes "$remote")"
1185 local remote
="${prv#remote.}"
1186 remote
="${remote%.push}"
1187 __gitcomp
"$(git --git-dir="$
(__gitdir
)" \
1188 for-each-ref --format='%(refname):%(refname)' \
1192 pull.twohead|pull.octopus
)
1193 __gitcomp
"$(__git_merge_strategies)"
1196 color.branch|color.
diff|color.status
)
1197 __gitcomp
"always never auto"
1202 black red green yellow blue magenta cyan white
1203 bold dim ul blink reverse
1215 --global --system --file=
1216 --list --replace-all
1217 --get --get-all --get-regexp
1218 --add --unset --unset-all
1219 --remove-section --rename-section
1224 local pfx
="${cur%.*}."
1226 __gitcomp
"remote merge" "$pfx" "$cur"
1230 local pfx
="${cur%.*}."
1232 __gitcomp
"$(__git_heads)" "$pfx" "$cur" "."
1236 local pfx
="${cur%.*}."
1239 url fetch push skipDefaultUpdate
1240 receivepack uploadpack tagopt
1245 local pfx
="${cur%.*}."
1247 __gitcomp
"$(__git_remotes)" "$pfx" "$cur" "."
1256 core.preferSymlinkRefs
1257 core.logAllRefUpdates
1258 core.loosecompression
1259 core.repositoryFormatVersion
1260 core.sharedRepository
1261 core.warnAmbiguousRefs
1263 core.packedGitWindowSize
1267 color.branch.current
1278 color.diff.whitespace
1283 color.status.changed
1284 color.status.untracked
1289 format.subjectprefix
1293 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
1294 gitcvs.dbtablenameprefix
1297 gc.reflogexpireunreachable
1310 i18n.logOutputEncoding
1320 pack.deltaCacheLimit
1323 repack.useDeltaBaseOffset
1326 transfer.unpackLimit
1328 receive.denyNonFastForwards
1338 local subcommands
="add rm show prune update"
1339 local subcommand
="$(__git_find_subcommand "$subcommands")"
1340 if [ -z "$subcommand" ]; then
1341 __gitcomp
"$subcommands"
1345 case "$subcommand" in
1347 __gitcomp
"$(__git_remotes)"
1350 local i c
='' IFS
=$
'\n'
1351 for i
in $
(git
--git-dir="$(__gitdir)" config
--list); do
1369 __git_has_doubledash
&& return
1371 local cur
="${COMP_WORDS[COMP_CWORD]}"
1374 __gitcomp
"--mixed --hard --soft"
1378 __gitcomp
"$(__git_refs)"
1383 local cur
="${COMP_WORDS[COMP_CWORD]}"
1386 __gitcomp
"--edit --mainline --no-edit --no-commit --signoff"
1395 __git_has_doubledash
&& return
1397 local cur
="${COMP_WORDS[COMP_CWORD]}"
1400 __gitcomp
"--cached --dry-run --ignore-unmatch --quiet"
1409 __git_has_doubledash
&& return
1411 local cur
="${COMP_WORDS[COMP_CWORD]}"
1415 --max-count= --max-age= --since= --after=
1416 --min-age= --before= --until=
1418 --author= --committer= --grep=
1421 --numbered --summary
1426 __git_complete_revlist
1431 local cur
="${COMP_WORDS[COMP_CWORD]}"
1435 oneline short medium full fuller email raw
1436 " "" "${cur##--pretty=}"
1440 __gitcomp
"--pretty="
1449 local cur
="${COMP_WORDS[COMP_CWORD]}"
1453 --all --remotes --topo-order --current --more=
1454 --list --independent --merge-base --no-name
1455 --sha1-name --topics --reflog
1460 __git_complete_revlist
1465 local subcommands
='save list show apply clear drop pop create branch'
1466 local subcommand
="$(__git_find_subcommand "$subcommands")"
1467 if [ -z "$subcommand" ]; then
1468 __gitcomp
"$subcommands"
1470 local cur
="${COMP_WORDS[COMP_CWORD]}"
1471 case "$subcommand,$cur" in
1473 __gitcomp
"--keep-index"
1478 show
,--*|drop
,--*|pop
,--*|branch
,--*)
1481 show
,*|apply
,*|drop
,*|pop
,*|branch
,*)
1482 __gitcomp
"$(git --git-dir="$
(__gitdir
)" stash list \
1483 | sed -n -e 's/:.*//p')"
1494 __git_has_doubledash
&& return
1496 local subcommands
="add status init update summary foreach sync"
1497 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1498 local cur
="${COMP_WORDS[COMP_CWORD]}"
1501 __gitcomp
"--quiet --cached"
1504 __gitcomp
"$subcommands"
1514 init fetch clone rebase dcommit log find-rev
1515 set-tree commit-diff info create-ignore propget
1516 proplist show-ignore show-externals
1518 local subcommand
="$(__git_find_subcommand "$subcommands")"
1519 if [ -z "$subcommand" ]; then
1520 __gitcomp
"$subcommands"
1522 local remote_opts
="--username= --config-dir= --no-auth-cache"
1524 --follow-parent --authors-file= --repack=
1525 --no-metadata --use-svm-props --use-svnsync-props
1526 --log-window-size= --no-checkout --quiet
1527 --repack-flags --user-log-author $remote_opts
1530 --template= --shared= --trunk= --tags=
1531 --branches= --stdlayout --minimize-url
1532 --no-metadata --use-svm-props --use-svnsync-props
1533 --rewrite-root= $remote_opts
1536 --edit --rmdir --find-copies-harder --copy-similarity=
1539 local cur
="${COMP_WORDS[COMP_CWORD]}"
1540 case "$subcommand,$cur" in
1542 __gitcomp
"--revision= --fetch-all $fc_opts"
1545 __gitcomp
"--revision= $fc_opts $init_opts"
1548 __gitcomp
"$init_opts"
1552 --merge --strategy= --verbose --dry-run
1553 --fetch-all --no-rebase $cmt_opts $fc_opts
1557 __gitcomp
"--stdin $cmt_opts $fc_opts"
1559 create-ignore
,--*|propget
,--*|proplist
,--*|show-ignore
,--*|\
1561 __gitcomp
"--revision="
1565 --limit= --revision= --verbose --incremental
1566 --oneline --show-commit --non-recursive
1572 --merge --verbose --strategy= --local
1573 --fetch-all $fc_opts
1577 __gitcomp
"--message= --file= --revision= $cmt_opts"
1592 while [ $c -lt $COMP_CWORD ]; do
1593 i
="${COMP_WORDS[c]}"
1596 __gitcomp
"$(__git_tags)"
1606 case "${COMP_WORDS[COMP_CWORD-1]}" in
1612 __gitcomp
"$(__git_tags)"
1618 __gitcomp
"$(__git_refs)"
1625 local i c
=1 command __git_dir
1627 while [ $c -lt $COMP_CWORD ]; do
1628 i
="${COMP_WORDS[c]}"
1630 --git-dir=*) __git_dir
="${i#--git-dir=}" ;;
1631 --bare) __git_dir
="." ;;
1632 --version|
-p|
--paginate) ;;
1633 --help) command="help"; break ;;
1634 *) command="$i"; break ;;
1639 if [ -z "$command" ]; then
1640 case "${COMP_WORDS[COMP_CWORD]}" in
1641 --*=*) COMPREPLY
=() ;;
1653 *) __gitcomp
"$(__git_porcelain_commands) $(__git_aliases)" ;;
1658 local expansion
=$
(__git_aliased_command
"$command")
1659 [ "$expansion" ] && command="$expansion"
1664 apply
) _git_apply
;;
1665 archive
) _git_archive
;;
1666 bisect
) _git_bisect
;;
1667 bundle
) _git_bundle
;;
1668 branch
) _git_branch
;;
1669 checkout
) _git_checkout
;;
1670 cherry
) _git_cherry
;;
1671 cherry-pick
) _git_cherry_pick
;;
1672 clean
) _git_clean
;;
1673 clone
) _git_clone
;;
1674 commit
) _git_commit
;;
1675 config
) _git_config
;;
1676 describe
) _git_describe
;;
1678 fetch
) _git_fetch
;;
1679 format-patch
) _git_format_patch
;;
1685 ls-files
) _git_ls_files
;;
1686 ls-remote
) _git_ls_remote
;;
1687 ls-tree
) _git_ls_tree
;;
1689 mergetool
) _git_mergetool
;;
1690 merge-base
) _git_merge_base
;;
1692 name-rev
) _git_name_rev
;;
1695 rebase
) _git_rebase
;;
1696 remote
) _git_remote
;;
1697 reset) _git_reset
;;
1698 revert
) _git_revert
;;
1700 send-email
) _git_send_email
;;
1701 shortlog
) _git_shortlog
;;
1703 show-branch
) _git_show_branch
;;
1704 stash
) _git_stash
;;
1705 submodule
) _git_submodule
;;
1708 whatchanged
) _git_log
;;
1715 __git_has_doubledash
&& return
1717 local cur
="${COMP_WORDS[COMP_CWORD]}"
1718 local g
="$(git rev-parse --git-dir 2>/dev/null)"
1720 if [ -f $g/MERGE_HEAD
]; then
1725 __gitcomp
"--not --all $merge"
1729 __git_complete_revlist
1732 complete
-o default
-o nospace
-F _git git
1733 complete
-o default
-o nospace
-F _gitk gitk
1735 # The following are necessary only for Cygwin, and only are needed
1736 # when the user has tab-completed the executable name and consequently
1737 # included the '.exe' suffix.
1739 if [ Cygwin
= "$(uname -o 2>/dev/null)" ]; then
1740 complete
-o default
-o nospace
-F _git git.exe