<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,7 +1,7 @@
-source .git-completion.bash
+source ~/.git-completion.bash
 
 # Environment variables
-export PS1='\e[36m\w$(__git_ps1 &quot;(%s)&quot;) \e[0m&gt; '
+export PS1='\[\e[36m\]\w$(__git_ps1 &quot;(%s)&quot;) \[\e[0m&gt; \]'
 export HISTCONTROL=erasedups
 export HISTSIZE=10000
 if [ -e mvim ]
@@ -50,5 +50,7 @@ alias git_remove_missing_files=&quot;gs | awk '/deleted:(.*)/ {print $3}' | xargs git
 alias gcm='git commit -m'
 alias gp='git push'
 alias gbr='git checkout -b'
+alias gco='git checkout'
+alias gmas='git checkout master'
 
 bind &quot;set completion-ignore-case on&quot;</diff>
      <filename>.bashrc</filename>
    </modified>
    <modified>
      <diff>@@ -45,11 +45,6 @@
 #       git@vger.kernel.org
 #
 
-case &quot;$COMP_WORDBREAKS&quot; in
-*:*) : great ;;
-*)   COMP_WORDBREAKS=&quot;$COMP_WORDBREAKS:&quot;
-esac
-
 __gitdir ()
 {
 	if [ -z &quot;$1&quot; ]; then
@@ -73,41 +68,30 @@ __git_ps1 ()
 	if [ -n &quot;$g&quot; ]; then
 		local r
 		local b
-		if [ -d &quot;$g/rebase-apply&quot; ]
+		if [ -d &quot;$g/../.dotest&quot; ]
 		then
-			if test -f &quot;$g/rebase-apply/rebasing&quot;
-			then
-				r=&quot;|REBASE&quot;
-			elif test -f &quot;$g/rebase-apply/applying&quot;
-			then
-				r=&quot;|AM&quot;
-			else
-				r=&quot;|AM/REBASE&quot;
-			fi
+			r=&quot;|AM/REBASE&quot;
 			b=&quot;$(git symbolic-ref HEAD 2&gt;/dev/null)&quot;
-		elif [ -f &quot;$g/rebase-merge/interactive&quot; ]
+		elif [ -f &quot;$g/.dotest-merge/interactive&quot; ]
 		then
 			r=&quot;|REBASE-i&quot;
-			b=&quot;$(cat &quot;$g/rebase-merge/head-name&quot;)&quot;
-		elif [ -d &quot;$g/rebase-merge&quot; ]
+			b=&quot;$(cat $g/.dotest-merge/head-name)&quot;
+		elif [ -d &quot;$g/.dotest-merge&quot; ]
 		then
 			r=&quot;|REBASE-m&quot;
-			b=&quot;$(cat &quot;$g/rebase-merge/head-name&quot;)&quot;
+			b=&quot;$(cat $g/.dotest-merge/head-name)&quot;
 		elif [ -f &quot;$g/MERGE_HEAD&quot; ]
 		then
 			r=&quot;|MERGING&quot;
 			b=&quot;$(git symbolic-ref HEAD 2&gt;/dev/null)&quot;
 		else
-			if [ -f &quot;$g/BISECT_LOG&quot; ]
+			if [ -f $g/BISECT_LOG ]
 			then
 				r=&quot;|BISECTING&quot;
 			fi
 			if ! b=&quot;$(git symbolic-ref HEAD 2&gt;/dev/null)&quot;
 			then
-				if ! b=&quot;$(git describe --exact-match HEAD 2&gt;/dev/null)&quot;
-				then
-					b=&quot;$(cut -c1-7 &quot;$g/HEAD&quot;)...&quot;
-				fi
+				b=&quot;$(cut -c1-7 $g/HEAD)...&quot;
 			fi
 		fi
 
@@ -119,46 +103,37 @@ __git_ps1 ()
 	fi
 }
 
-__gitcomp_1 ()
-{
-	local c IFS=' '$'\t'$'\n'
-	for c in $1; do
-		case &quot;$c$2&quot; in
-		--*=*) printf %s$'\n' &quot;$c$2&quot; ;;
-		*.)    printf %s$'\n' &quot;$c$2&quot; ;;
-		*)     printf %s$'\n' &quot;$c$2 &quot; ;;
-		esac
-	done
-}
-
 __gitcomp ()
 {
+	local all c s=$'\n' IFS=' '$'\t'$'\n'
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	if [ $# -gt 2 ]; then
 		cur=&quot;$3&quot;
 	fi
-	case &quot;$cur&quot; in
-	--*=)
-		COMPREPLY=()
-		;;
-	*)
-		local IFS=$'\n'
-		COMPREPLY=($(compgen -P &quot;$2&quot; \
-			-W &quot;$(__gitcomp_1 &quot;$1&quot; &quot;$4&quot;)&quot; \
-			-- &quot;$cur&quot;))
-		;;
-	esac
+	for c in $1; do
+		case &quot;$c$4&quot; in
+		--*=*) all=&quot;$all$c$4$s&quot; ;;
+		*.)    all=&quot;$all$c$4$s&quot; ;;
+		*)     all=&quot;$all$c$4 $s&quot; ;;
+		esac
+	done
+	IFS=$s
+	COMPREPLY=($(compgen -P &quot;$2&quot; -W &quot;$all&quot; -- &quot;$cur&quot;))
+	return
 }
 
 __git_heads ()
 {
 	local cmd i is_hash=y dir=&quot;$(__gitdir &quot;$1&quot;)&quot;
 	if [ -d &quot;$dir&quot; ]; then
-		git --git-dir=&quot;$dir&quot; for-each-ref --format='%(refname:short)' \
-			refs/heads
+		for i in $(git --git-dir=&quot;$dir&quot; \
+			for-each-ref --format='%(refname)' \
+			refs/heads ); do
+			echo &quot;${i#refs/heads/}&quot;
+		done
 		return
 	fi
-	for i in $(git ls-remote &quot;$1&quot; 2&gt;/dev/null); do
+	for i in $(git-ls-remote &quot;$1&quot; 2&gt;/dev/null); do
 		case &quot;$is_hash,$i&quot; in
 		y,*) is_hash=n ;;
 		n,*^{}) is_hash=y ;;
@@ -172,11 +147,14 @@ __git_tags ()
 {
 	local cmd i is_hash=y dir=&quot;$(__gitdir &quot;$1&quot;)&quot;
 	if [ -d &quot;$dir&quot; ]; then
-		git --git-dir=&quot;$dir&quot; for-each-ref --format='%(refname:short)' \
-			refs/tags
+		for i in $(git --git-dir=&quot;$dir&quot; \
+			for-each-ref --format='%(refname)' \
+			refs/tags ); do
+			echo &quot;${i#refs/tags/}&quot;
+		done
 		return
 	fi
-	for i in $(git ls-remote &quot;$1&quot; 2&gt;/dev/null); do
+	for i in $(git-ls-remote &quot;$1&quot; 2&gt;/dev/null); do
 		case &quot;$is_hash,$i&quot; in
 		y,*) is_hash=n ;;
 		n,*^{}) is_hash=y ;;
@@ -188,25 +166,22 @@ __git_tags ()
 
 __git_refs ()
 {
-	local i is_hash=y dir=&quot;$(__gitdir &quot;$1&quot;)&quot;
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot; format refs
+	local cmd i is_hash=y dir=&quot;$(__gitdir &quot;$1&quot;)&quot;
 	if [ -d &quot;$dir&quot; ]; then
-		case &quot;$cur&quot; in
-		refs|refs/*)
-			format=&quot;refname&quot;
-			refs=&quot;${cur%/*}&quot;
-			;;
-		*)
-			if [ -e &quot;$dir/HEAD&quot; ]; then echo HEAD; fi
-			format=&quot;refname:short&quot;
-			refs=&quot;refs/tags refs/heads refs/remotes&quot;
-			;;
-		esac
-		git --git-dir=&quot;$dir&quot; for-each-ref --format=&quot;%($format)&quot; \
-			$refs
+		if [ -e &quot;$dir/HEAD&quot; ]; then echo HEAD; fi
+		for i in $(git --git-dir=&quot;$dir&quot; \
+			for-each-ref --format='%(refname)' \
+			refs/tags refs/heads refs/remotes); do
+			case &quot;$i&quot; in
+				refs/tags/*)    echo &quot;${i#refs/tags/}&quot; ;;
+				refs/heads/*)   echo &quot;${i#refs/heads/}&quot; ;;
+				refs/remotes/*) echo &quot;${i#refs/remotes/}&quot; ;;
+				*)              echo &quot;$i&quot; ;;
+			esac
+		done
 		return
 	fi
-	for i in $(git ls-remote &quot;$dir&quot; 2&gt;/dev/null); do
+	for i in $(git-ls-remote &quot;$dir&quot; 2&gt;/dev/null); do
 		case &quot;$is_hash,$i&quot; in
 		y,*) is_hash=n ;;
 		n,*^{}) is_hash=y ;;
@@ -229,7 +204,7 @@ __git_refs2 ()
 __git_refs_remotes ()
 {
 	local cmd i is_hash=y
-	for i in $(git ls-remote &quot;$1&quot; 2&gt;/dev/null); do
+	for i in $(git-ls-remote &quot;$1&quot; 2&gt;/dev/null); do
 		case &quot;$is_hash,$i&quot; in
 		n,refs/heads/*)
 			is_hash=y
@@ -268,17 +243,15 @@ __git_merge_strategies ()
 		echo &quot;$__git_merge_strategylist&quot;
 		return
 	fi
-	git merge -s help 2&gt;&amp;1 |
-	sed -n -e '/[Aa]vailable strategies are: /,/^$/{
-		s/\.$//
-		s/.*://
-		s/^[ 	]*//
-		s/[ 	]*$//
+	sed -n &quot;/^all_strategies='/{
+		s/^all_strategies='//
+		s/'//
 		p
-	}'
+		q
+		}&quot; &quot;$(git --exec-path)/git-merge&quot;
 }
 __git_merge_strategylist=
-__git_merge_strategylist=$(__git_merge_strategies 2&gt;/dev/null)
+__git_merge_strategylist=&quot;$(__git_merge_strategies 2&gt;/dev/null)&quot;
 
 __git_complete_file ()
 {
@@ -298,23 +271,9 @@ __git_complete_file ()
 			ls=&quot;$ref&quot;
 			;;
 	    esac
-
-		case &quot;$COMP_WORDBREAKS&quot; in
-		*:*) : great ;;
-		*)   pfx=&quot;$ref:$pfx&quot; ;;
-		esac
-
-		local IFS=$'\n'
 		COMPREPLY=($(compgen -P &quot;$pfx&quot; \
 			-W &quot;$(git --git-dir=&quot;$(__gitdir)&quot; ls-tree &quot;$ls&quot; \
-				| sed '/^100... blob /{
-				           s,^.*	,,
-				           s,$, ,
-				       }
-				       /^120000 blob /{
-				           s,^.*	,,
-				           s,$, ,
-				       }
+				| sed '/^100... blob /s,^.*	,,
 				       /^040000 tree /{
 				           s,^.*	,,
 				           s,$,/,
@@ -342,16 +301,19 @@ __git_complete_revlist ()
 		cur=&quot;${cur#*..}&quot;
 		__gitcomp &quot;$(__git_refs)&quot; &quot;$pfx&quot; &quot;$cur&quot;
 		;;
+	*.)
+		__gitcomp &quot;$cur.&quot;
+		;;
 	*)
 		__gitcomp &quot;$(__git_refs)&quot;
 		;;
 	esac
 }
 
-__git_all_commands ()
+__git_commands ()
 {
-	if [ -n &quot;$__git_all_commandlist&quot; ]; then
-		echo &quot;$__git_all_commandlist&quot;
+	if [ -n &quot;$__git_commandlist&quot; ]; then
+		echo &quot;$__git_commandlist&quot;
 		return
 	fi
 	local i IFS=&quot; &quot;$'\n'
@@ -359,33 +321,13 @@ __git_all_commands ()
 	do
 		case $i in
 		*--*)             : helper pattern;;
-		*) echo $i;;
-		esac
-	done
-}
-__git_all_commandlist=
-__git_all_commandlist=&quot;$(__git_all_commands 2&gt;/dev/null)&quot;
-
-__git_porcelain_commands ()
-{
-	if [ -n &quot;$__git_porcelain_commandlist&quot; ]; then
-		echo &quot;$__git_porcelain_commandlist&quot;
-		return
-	fi
-	local i IFS=&quot; &quot;$'\n'
-	for i in &quot;help&quot; $(__git_all_commands)
-	do
-		case $i in
-		*--*)             : helper pattern;;
 		applymbox)        : ask gittus;;
 		applypatch)       : ask gittus;;
 		archimport)       : import;;
 		cat-file)         : plumbing;;
 		check-attr)       : plumbing;;
 		check-ref-format) : plumbing;;
-		checkout-index)   : plumbing;;
 		commit-tree)      : plumbing;;
-		count-objects)    : infrequent;;
 		cvsexportcommit)  : export;;
 		cvsimport)        : import;;
 		cvsserver)        : daemon;;
@@ -394,7 +336,6 @@ __git_porcelain_commands ()
 		diff-index)       : plumbing;;
 		diff-tree)        : plumbing;;
 		fast-import)      : import;;
-		fast-export)      : export;;
 		fsck-objects)     : plumbing;;
 		fetch-pack)       : plumbing;;
 		fmt-merge-msg)    : plumbing;;
@@ -404,10 +345,6 @@ __git_porcelain_commands ()
 		index-pack)       : plumbing;;
 		init-db)          : deprecated;;
 		local-fetch)      : plumbing;;
-		lost-found)       : infrequent;;
-		ls-files)         : plumbing;;
-		ls-remote)        : plumbing;;
-		ls-tree)          : plumbing;;
 		mailinfo)         : plumbing;;
 		mailsplit)        : plumbing;;
 		merge-*)          : plumbing;;
@@ -432,11 +369,11 @@ __git_porcelain_commands ()
 		runstatus)        : plumbing;;
 		sh-setup)         : internal;;
 		shell)            : daemon;;
-		show-ref)         : plumbing;;
 		send-pack)        : plumbing;;
 		show-index)       : plumbing;;
 		ssh-*)            : transport;;
 		stripspace)       : plumbing;;
+		svn)              : import export;;
 		symbolic-ref)     : plumbing;;
 		tar-tree)         : deprecated;;
 		unpack-file)      : plumbing;;
@@ -447,15 +384,13 @@ __git_porcelain_commands ()
 		upload-archive)   : plumbing;;
 		upload-pack)      : plumbing;;
 		write-tree)       : plumbing;;
-		var)              : infrequent;;
-		verify-pack)      : infrequent;;
 		verify-tag)       : plumbing;;
 		*) echo $i;;
 		esac
 	done
 }
-__git_porcelain_commandlist=
-__git_porcelain_commandlist=&quot;$(__git_porcelain_commands 2&gt;/dev/null)&quot;
+__git_commandlist=
+__git_commandlist=&quot;$(__git_commands 2&gt;/dev/null)&quot;
 
 __git_aliases ()
 {
@@ -482,41 +417,13 @@ __git_aliased_command ()
 	done
 }
 
-__git_find_subcommand ()
-{
-	local word subcommand c=1
-
-	while [ $c -lt $COMP_CWORD ]; do
-		word=&quot;${COMP_WORDS[c]}&quot;
-		for subcommand in $1; do
-			if [ &quot;$subcommand&quot; = &quot;$word&quot; ]; then
-				echo &quot;$subcommand&quot;
-				return
-			fi
-		done
-		c=$((++c))
-	done
-}
-
-__git_has_doubledash ()
-{
-	local c=1
-	while [ $c -lt $COMP_CWORD ]; do
-		if [ &quot;--&quot; = &quot;${COMP_WORDS[c]}&quot; ]; then
-			return 0
-		fi
-		c=$((++c))
-	done
-	return 1
-}
-
-__git_whitespacelist=&quot;nowarn warn error error-all fix&quot;
+__git_whitespacelist=&quot;nowarn warn error error-all strip&quot;
 
 _git_am ()
 {
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot; dir=&quot;$(__gitdir)&quot;
-	if [ -d &quot;$dir&quot;/rebase-apply ]; then
-		__gitcomp &quot;--skip --resolved --abort&quot;
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	if [ -d .dotest ]; then
+		__gitcomp &quot;--skip --resolved&quot;
 		return
 	fi
 	case &quot;$cur&quot; in
@@ -556,56 +463,36 @@ _git_apply ()
 
 _git_add ()
 {
-	__git_has_doubledash &amp;&amp; return
-
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	case &quot;$cur&quot; in
 	--*)
-		__gitcomp &quot;
-			--interactive --refresh --patch --update --dry-run
-			--ignore-errors
-			&quot;
+		__gitcomp &quot;--interactive --refresh&quot;
 		return
 	esac
 	COMPREPLY=()
 }
 
-_git_archive ()
-{
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	case &quot;$cur&quot; in
-	--format=*)
-		__gitcomp &quot;$(git archive --list)&quot; &quot;&quot; &quot;${cur##--format=}&quot;
-		return
-		;;
-	--remote=*)
-		__gitcomp &quot;$(__git_remotes)&quot; &quot;&quot; &quot;${cur##--remote=}&quot;
-		return
-		;;
-	--*)
-		__gitcomp &quot;
-			--format= --list --verbose
-			--prefix= --remote= --exec=
-			&quot;
-		return
-		;;
-	esac
-	__git_complete_file
-}
-
 _git_bisect ()
 {
-	__git_has_doubledash &amp;&amp; return
+	local i c=1 command
+	while [ $c -lt $COMP_CWORD ]; do
+		i=&quot;${COMP_WORDS[c]}&quot;
+		case &quot;$i&quot; in
+		start|bad|good|reset|visualize|replay|log)
+			command=&quot;$i&quot;
+			break
+			;;
+		esac
+		c=$((++c))
+	done
 
-	local subcommands=&quot;start bad good skip reset visualize replay log run&quot;
-	local subcommand=&quot;$(__git_find_subcommand &quot;$subcommands&quot;)&quot;
-	if [ -z &quot;$subcommand&quot; ]; then
-		__gitcomp &quot;$subcommands&quot;
+	if [ $c -eq $COMP_CWORD -a -z &quot;$command&quot; ]; then
+		__gitcomp &quot;start bad good reset visualize replay log&quot;
 		return
 	fi
 
-	case &quot;$subcommand&quot; in
-	bad|good|reset|skip)
+	case &quot;$command&quot; in
+	bad|good|reset)
 		__gitcomp &quot;$(__git_refs)&quot;
 		;;
 	*)
@@ -616,43 +503,26 @@ _git_bisect ()
 
 _git_branch ()
 {
-	local i c=1 only_local_ref=&quot;n&quot; has_r=&quot;n&quot;
-
-	while [ $c -lt $COMP_CWORD ]; do
-		i=&quot;${COMP_WORDS[c]}&quot;
-		case &quot;$i&quot; in
-		-d|-m)	only_local_ref=&quot;y&quot; ;;
-		-r)	has_r=&quot;y&quot; ;;
-		esac
-		c=$((++c))
-	done
-
-	case &quot;${COMP_WORDS[COMP_CWORD]}&quot; in
-	--*=*)	COMPREPLY=() ;;
-	--*)
-		__gitcomp &quot;
-			--color --no-color --verbose --abbrev= --no-abbrev
-			--track --no-track --contains --merged --no-merged
-			&quot;
-		;;
-	*)
-		if [ $only_local_ref = &quot;y&quot; -a $has_r = &quot;n&quot; ]; then
-			__gitcomp &quot;$(__git_heads)&quot;
-		else
-			__gitcomp &quot;$(__git_refs)&quot;
-		fi
-		;;
-	esac
+	__gitcomp &quot;$(__git_refs)&quot;
 }
 
 _git_bundle ()
 {
-	local cmd=&quot;${COMP_WORDS[2]}&quot;
-	case &quot;$COMP_CWORD&quot; in
-	2)
+	local mycword=&quot;$COMP_CWORD&quot;
+	case &quot;${COMP_WORDS[0]}&quot; in
+	git)
+		local cmd=&quot;${COMP_WORDS[2]}&quot;
+		mycword=&quot;$((mycword-1))&quot;
+		;;
+	git-bundle*)
+		local cmd=&quot;${COMP_WORDS[1]}&quot;
+		;;
+	esac
+	case &quot;$mycword&quot; in
+	1)
 		__gitcomp &quot;create list-heads verify unbundle&quot;
 		;;
-	3)
+	2)
 		# looking for a file
 		;;
 	*)
@@ -667,8 +537,6 @@ _git_bundle ()
 
 _git_checkout ()
 {
-	__git_has_doubledash &amp;&amp; return
-
 	__gitcomp &quot;$(__git_refs)&quot;
 }
 
@@ -690,55 +558,14 @@ _git_cherry_pick ()
 	esac
 }
 
-_git_clean ()
-{
-	__git_has_doubledash &amp;&amp; return
-
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	case &quot;$cur&quot; in
-	--*)
-		__gitcomp &quot;--dry-run --quiet&quot;
-		return
-		;;
-	esac
-	COMPREPLY=()
-}
-
-_git_clone ()
-{
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	case &quot;$cur&quot; in
-	--*)
-		__gitcomp &quot;
-			--local
-			--no-hardlinks
-			--shared
-			--reference
-			--quiet
-			--no-checkout
-			--bare
-			--mirror
-			--origin
-			--upload-pack
-			--template=
-			--depth
-			&quot;
-		return
-		;;
-	esac
-	COMPREPLY=()
-}
-
 _git_commit ()
 {
-	__git_has_doubledash &amp;&amp; return
-
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	case &quot;$cur&quot; in
 	--*)
 		__gitcomp &quot;
 			--all --author= --signoff --verify --no-verify
-			--edit --amend --include --only --interactive
+			--edit --amend --include --only
 			&quot;
 		return
 	esac
@@ -747,63 +574,60 @@ _git_commit ()
 
 _git_describe ()
 {
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	case &quot;$cur&quot; in
-	--*)
-		__gitcomp &quot;
-			--all --tags --contains --abbrev= --candidates=
-			--exact-match --debug --long --match --always
-			&quot;
-		return
-	esac
 	__gitcomp &quot;$(__git_refs)&quot;
 }
 
 _git_diff ()
 {
-	__git_has_doubledash &amp;&amp; return
-
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	case &quot;$cur&quot; in
 	--*)
 		__gitcomp &quot;--cached --stat --numstat --shortstat --summary
 			--patch-with-stat --name-only --name-status --color
 			--no-color --color-words --no-renames --check
-			--full-index --binary --abbrev --diff-filter=
+			--full-index --binary --abbrev --diff-filter
 			--find-copies-harder --pickaxe-all --pickaxe-regex
 			--text --ignore-space-at-eol --ignore-space-change
 			--ignore-all-space --exit-code --quiet --ext-diff
-			--no-ext-diff
-			--no-prefix --src-prefix= --dst-prefix=
-			--base --ours --theirs
-			&quot;
+			--no-ext-diff&quot;
 		return
 		;;
 	esac
 	__git_complete_file
 }
 
+_git_diff_tree ()
+{
+	__gitcomp &quot;$(__git_refs)&quot;
+}
+
 _git_fetch ()
 {
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 
-	if [ &quot;$COMP_CWORD&quot; = 2 ]; then
+	case &quot;${COMP_WORDS[0]},$COMP_CWORD&quot; in
+	git-fetch*,1)
 		__gitcomp &quot;$(__git_remotes)&quot;
-	else
+		;;
+	git,2)
+		__gitcomp &quot;$(__git_remotes)&quot;
+		;;
+	*)
 		case &quot;$cur&quot; in
 		*:*)
-			local pfx=&quot;&quot;
-			case &quot;$COMP_WORDBREAKS&quot; in
-			*:*) : great ;;
-			*)   pfx=&quot;${cur%%:*}:&quot; ;;
-			esac
-			__gitcomp &quot;$(__git_refs)&quot; &quot;$pfx&quot; &quot;${cur#*:}&quot;
+			__gitcomp &quot;$(__git_refs)&quot; &quot;&quot; &quot;${cur#*:}&quot;
 			;;
 		*)
-			__gitcomp &quot;$(__git_refs2 &quot;${COMP_WORDS[2]}&quot;)&quot;
+			local remote
+			case &quot;${COMP_WORDS[0]}&quot; in
+			git-fetch) remote=&quot;${COMP_WORDS[1]}&quot; ;;
+			git)       remote=&quot;${COMP_WORDS[2]}&quot; ;;
+			esac
+			__gitcomp &quot;$(__git_refs2 &quot;$remote&quot;)&quot;
 			;;
 		esac
-	fi
+		;;
+	esac
 }
 
 _git_format_patch ()
@@ -821,8 +645,6 @@ _git_format_patch ()
 			--in-reply-to=
 			--full-index --binary
 			--not --all
-			--cover-letter
-			--no-prefix --src-prefix= --dst-prefix=
 			&quot;
 		return
 		;;
@@ -842,84 +664,6 @@ _git_gc ()
 	COMPREPLY=()
 }
 
-_git_grep ()
-{
-	__git_has_doubledash &amp;&amp; return
-
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	case &quot;$cur&quot; in
-	--*)
-		__gitcomp &quot;
-			--cached
-			--text --ignore-case --word-regexp --invert-match
-			--full-name
-			--extended-regexp --basic-regexp --fixed-strings
-			--files-with-matches --name-only
-			--files-without-match
-			--count
-			--and --or --not --all-match
-			&quot;
-		return
-		;;
-	esac
-	COMPREPLY=()
-}
-
-_git_help ()
-{
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	case &quot;$cur&quot; in
-	--*)
-		__gitcomp &quot;--all --info --man --web&quot;
-		return
-		;;
-	esac
-	__gitcomp &quot;$(__git_all_commands)
-		attributes cli core-tutorial cvs-migration
-		diffcore gitk glossary hooks ignore modules
-		repository-layout tutorial tutorial-2
-		workflows
-		&quot;
-}
-
-_git_init ()
-{
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	case &quot;$cur&quot; in
-	--shared=*)
-		__gitcomp &quot;
-			false true umask group all world everybody
-			&quot; &quot;&quot; &quot;${cur##--shared=}&quot;
-		return
-		;;
-	--*)
-		__gitcomp &quot;--quiet --bare --template= --shared --shared=&quot;
-		return
-		;;
-	esac
-	COMPREPLY=()
-}
-
-_git_ls_files ()
-{
-	__git_has_doubledash &amp;&amp; return
-
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	case &quot;$cur&quot; in
-	--*)
-		__gitcomp &quot;--cached --deleted --modified --others --ignored
-			--stage --directory --no-empty-directory --unmerged
-			--killed --exclude= --exclude-from=
-			--exclude-per-directory= --exclude-standard
-			--error-unmatch --with-tree= --full-name
-			--abbrev --ignored --exclude-per-directory
-			&quot;
-		return
-		;;
-	esac
-	COMPREPLY=()
-}
-
 _git_ls_remote ()
 {
 	__gitcomp &quot;$(__git_remotes)&quot;
@@ -932,8 +676,6 @@ _git_ls_tree ()
 
 _git_log ()
 {
-	__git_has_doubledash &amp;&amp; return
-
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	case &quot;$cur&quot; in
 	--pretty=*)
@@ -961,12 +703,6 @@ _git_log ()
 			--pretty= --name-status --name-only --raw
 			--not --all
 			--left-right --cherry-pick
-			--graph
-			--stat --numstat --shortstat
-			--decorate --diff-filter=
-			--color-words --walk-reflogs
-			--parents --children --full-history
-			--merge
 			&quot;
 		return
 		;;
@@ -989,49 +725,18 @@ _git_merge ()
 		;;
 	--*)
 		__gitcomp &quot;
-			--no-commit --no-stat --log --no-log --squash --strategy
+			--no-commit --no-summary --squash --strategy
 			&quot;
 		return
 	esac
 	__gitcomp &quot;$(__git_refs)&quot;
 }
 
-_git_mergetool ()
-{
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	case &quot;$cur&quot; in
-	--tool=*)
-		__gitcomp &quot;
-			kdiff3 tkdiff meld xxdiff emerge
-			vimdiff gvimdiff ecmerge opendiff
-			&quot; &quot;&quot; &quot;${cur##--tool=}&quot;
-		return
-		;;
-	--*)
-		__gitcomp &quot;--tool=&quot;
-		return
-		;;
-	esac
-	COMPREPLY=()
-}
-
 _git_merge_base ()
 {
 	__gitcomp &quot;$(__git_refs)&quot;
 }
 
-_git_mv ()
-{
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	case &quot;$cur&quot; in
-	--*)
-		__gitcomp &quot;--dry-run&quot;
-		return
-		;;
-	esac
-	COMPREPLY=()
-}
-
 _git_name_rev ()
 {
 	__gitcomp &quot;--tags --all --stdin&quot;
@@ -1041,29 +746,44 @@ _git_pull ()
 {
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 
-	if [ &quot;$COMP_CWORD&quot; = 2 ]; then
+	case &quot;${COMP_WORDS[0]},$COMP_CWORD&quot; in
+	git-pull*,1)
 		__gitcomp &quot;$(__git_remotes)&quot;
-	else
-		__gitcomp &quot;$(__git_refs &quot;${COMP_WORDS[2]}&quot;)&quot;
-	fi
+		;;
+	git,2)
+		__gitcomp &quot;$(__git_remotes)&quot;
+		;;
+	*)
+		local remote
+		case &quot;${COMP_WORDS[0]}&quot; in
+		git-pull)  remote=&quot;${COMP_WORDS[1]}&quot; ;;
+		git)       remote=&quot;${COMP_WORDS[2]}&quot; ;;
+		esac
+		__gitcomp &quot;$(__git_refs &quot;$remote&quot;)&quot;
+		;;
+	esac
 }
 
 _git_push ()
 {
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 
-	if [ &quot;$COMP_CWORD&quot; = 2 ]; then
+	case &quot;${COMP_WORDS[0]},$COMP_CWORD&quot; in
+	git-push*,1)
 		__gitcomp &quot;$(__git_remotes)&quot;
-	else
+		;;
+	git,2)
+		__gitcomp &quot;$(__git_remotes)&quot;
+		;;
+	*)
 		case &quot;$cur&quot; in
 		*:*)
-			local pfx=&quot;&quot;
-			case &quot;$COMP_WORDBREAKS&quot; in
-			*:*) : great ;;
-			*)   pfx=&quot;${cur%%:*}:&quot; ;;
+			local remote
+			case &quot;${COMP_WORDS[0]}&quot; in
+			git-push)  remote=&quot;${COMP_WORDS[1]}&quot; ;;
+			git)       remote=&quot;${COMP_WORDS[2]}&quot; ;;
 			esac
-
-			__gitcomp &quot;$(__git_refs &quot;${COMP_WORDS[2]}&quot;)&quot; &quot;$pfx&quot; &quot;${cur#*:}&quot;
+			__gitcomp &quot;$(__git_refs &quot;$remote&quot;)&quot; &quot;&quot; &quot;${cur#*:}&quot;
 			;;
 		+*)
 			__gitcomp &quot;$(__git_refs)&quot; + &quot;${cur#+}&quot;
@@ -1072,13 +792,14 @@ _git_push ()
 			__gitcomp &quot;$(__git_refs)&quot;
 			;;
 		esac
-	fi
+		;;
+	esac
 }
 
 _git_rebase ()
 {
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot; dir=&quot;$(__gitdir)&quot;
-	if [ -d &quot;$dir&quot;/rebase-apply ] || [ -d &quot;$dir&quot;/rebase-merge ]; then
+	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
+	if [ -d .dotest ] || [ -d .git/.dotest-merge ]; then
 		__gitcomp &quot;--continue --skip --abort&quot;
 		return
 	fi
@@ -1093,31 +814,12 @@ _git_rebase ()
 		return
 		;;
 	--*)
-		__gitcomp &quot;--onto --merge --strategy --interactive&quot;
+		__gitcomp &quot;--onto --merge --strategy&quot;
 		return
 	esac
 	__gitcomp &quot;$(__git_refs)&quot;
 }
 
-_git_send_email ()
-{
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	case &quot;$cur&quot; in
-	--*)
-		__gitcomp &quot;--bcc --cc --cc-cmd --chain-reply-to --compose
-			--dry-run --envelope-sender --from --identity
-			--in-reply-to --no-chain-reply-to --no-signed-off-by-cc
-			--no-suppress-from --no-thread --quiet
-			--signed-off-by-cc --smtp-pass --smtp-server
-			--smtp-server-port --smtp-ssl --smtp-user --subject
-			--suppress-cc --suppress-from --thread --to
-			--validate --no-validate&quot;
-		return
-		;;
-	esac
-	COMPREPLY=()
-}
-
 _git_config ()
 {
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
@@ -1216,6 +918,7 @@ _git_config ()
 		core.sharedRepository
 		core.warnAmbiguousRefs
 		core.compression
+		core.legacyHeaders
 		core.packedGitWindowSize
 		core.packedGitLimit
 		clean.requireForce
@@ -1246,8 +949,7 @@ _git_config ()
 		gitcvs.enabled
 		gitcvs.logfile
 		gitcvs.allbinary
-		gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
-		gitcvs.dbtablenameprefix
+		gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dvpass
 		gc.packrefs
 		gc.reflogexpire
 		gc.reflogexpireunreachable
@@ -1277,6 +979,7 @@ _git_config ()
 		pull.octopus
 		pull.twohead
 		repack.useDeltaBaseOffset
+		show.difftree
 		showbranch.default
 		tar.umask
 		transfer.unpackLimit
@@ -1285,20 +988,28 @@ _git_config ()
 		user.name
 		user.email
 		user.signingkey
+		whatchanged.difftree
 		branch. remote.
 	&quot;
 }
 
 _git_remote ()
 {
-	local subcommands=&quot;add rm show prune update&quot;
-	local subcommand=&quot;$(__git_find_subcommand &quot;$subcommands&quot;)&quot;
-	if [ -z &quot;$subcommand&quot; ]; then
-		__gitcomp &quot;$subcommands&quot;
+	local i c=1 command
+	while [ $c -lt $COMP_CWORD ]; do
+		i=&quot;${COMP_WORDS[c]}&quot;
+		case &quot;$i&quot; in
+		add|rm|show|prune|update) command=&quot;$i&quot;; break ;;
+		esac
+		c=$((++c))
+	done
+
+	if [ $c -eq $COMP_CWORD -a -z &quot;$command&quot; ]; then
+		__gitcomp &quot;add rm show prune update&quot;
 		return
 	fi
 
-	case &quot;$subcommand&quot; in
+	case &quot;$command&quot; in
 	rm|show|prune)
 		__gitcomp &quot;$(__git_remotes)&quot;
 		;;
@@ -1322,8 +1033,6 @@ _git_remote ()
 
 _git_reset ()
 {
-	__git_has_doubledash &amp;&amp; return
-
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	case &quot;$cur&quot; in
 	--*)
@@ -1334,36 +1043,8 @@ _git_reset ()
 	__gitcomp &quot;$(__git_refs)&quot;
 }
 
-_git_revert ()
-{
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	case &quot;$cur&quot; in
-	--*)
-		__gitcomp &quot;--edit --mainline --no-edit --no-commit --signoff&quot;
-		return
-		;;
-	esac
-	__gitcomp &quot;$(__git_refs)&quot;
-}
-
-_git_rm ()
-{
-	__git_has_doubledash &amp;&amp; return
-
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	case &quot;$cur&quot; in
-	--*)
-		__gitcomp &quot;--cached --dry-run --ignore-unmatch --quiet&quot;
-		return
-		;;
-	esac
-	COMPREPLY=()
-}
-
 _git_shortlog ()
 {
-	__git_has_doubledash &amp;&amp; return
-
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	case &quot;$cur&quot; in
 	--*)
@@ -1384,8 +1065,6 @@ _git_shortlog ()
 
 _git_show ()
 {
-	__git_has_doubledash &amp;&amp; return
-
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 	case &quot;$cur&quot; in
 	--pretty=*)
@@ -1402,148 +1081,36 @@ _git_show ()
 	__git_complete_file
 }
 
-_git_show_branch ()
-{
-	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	case &quot;$cur&quot; in
-	--*)
-		__gitcomp &quot;
-			--all --remotes --topo-order --current --more=
-			--list --independent --merge-base --no-name
-			--sha1-name --topics --reflog
-			&quot;
-		return
-		;;
-	esac
-	__git_complete_revlist
-}
-
 _git_stash ()
 {
-	local subcommands='save list show apply clear drop pop create branch'
-	local subcommand=&quot;$(__git_find_subcommand &quot;$subcommands&quot;)&quot;
-	if [ -z &quot;$subcommand&quot; ]; then
-		__gitcomp &quot;$subcommands&quot;
-	else
-		local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-		case &quot;$subcommand,$cur&quot; in
-		save,--*)
-			__gitcomp &quot;--keep-index&quot;
-			;;
-		apply,--*)
-			__gitcomp &quot;--index&quot;
-			;;
-		show,--*|drop,--*|pop,--*|branch,--*)
-			COMPREPLY=()
-			;;
-		show,*|apply,*|drop,*|pop,*|branch,*)
-			__gitcomp &quot;$(git --git-dir=&quot;$(__gitdir)&quot; stash list \
-					| sed -n -e 's/:.*//p')&quot;
-			;;
-		*)
-			COMPREPLY=()
-			;;
-		esac
-	fi
+	__gitcomp 'list show apply clear'
 }
 
 _git_submodule ()
 {
-	__git_has_doubledash &amp;&amp; return
+	local i c=1 command
+	while [ $c -lt $COMP_CWORD ]; do
+		i=&quot;${COMP_WORDS[c]}&quot;
+		case &quot;$i&quot; in
+		add|status|init|update) command=&quot;$i&quot;; break ;;
+		esac
+		c=$((++c))
+	done
 
-	local subcommands=&quot;add status init update summary foreach sync&quot;
-	if [ -z &quot;$(__git_find_subcommand &quot;$subcommands&quot;)&quot; ]; then
+	if [ $c -eq $COMP_CWORD -a -z &quot;$command&quot; ]; then
 		local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
 		case &quot;$cur&quot; in
 		--*)
 			__gitcomp &quot;--quiet --cached&quot;
 			;;
 		*)
-			__gitcomp &quot;$subcommands&quot;
+			__gitcomp &quot;add status init update&quot;
 			;;
 		esac
 		return
 	fi
 }
 
-_git_svn ()
-{
-	local subcommands=&quot;
-		init fetch clone rebase dcommit log find-rev
-		set-tree commit-diff info create-ignore propget
-		proplist show-ignore show-externals
-		&quot;
-	local subcommand=&quot;$(__git_find_subcommand &quot;$subcommands&quot;)&quot;
-	if [ -z &quot;$subcommand&quot; ]; then
-		__gitcomp &quot;$subcommands&quot;
-	else
-		local remote_opts=&quot;--username= --config-dir= --no-auth-cache&quot;
-		local fc_opts=&quot;
-			--follow-parent --authors-file= --repack=
-			--no-metadata --use-svm-props --use-svnsync-props
-			--log-window-size= --no-checkout --quiet
-			--repack-flags --user-log-author $remote_opts
-			&quot;
-		local init_opts=&quot;
-			--template= --shared= --trunk= --tags=
-			--branches= --stdlayout --minimize-url
-			--no-metadata --use-svm-props --use-svnsync-props
-			--rewrite-root= $remote_opts
-			&quot;
-		local cmt_opts=&quot;
-			--edit --rmdir --find-copies-harder --copy-similarity=
-			&quot;
-
-		local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-		case &quot;$subcommand,$cur&quot; in
-		fetch,--*)
-			__gitcomp &quot;--revision= --fetch-all $fc_opts&quot;
-			;;
-		clone,--*)
-			__gitcomp &quot;--revision= $fc_opts $init_opts&quot;
-			;;
-		init,--*)
-			__gitcomp &quot;$init_opts&quot;
-			;;
-		dcommit,--*)
-			__gitcomp &quot;
-				--merge --strategy= --verbose --dry-run
-				--fetch-all --no-rebase $cmt_opts $fc_opts
-				&quot;
-			;;
-		set-tree,--*)
-			__gitcomp &quot;--stdin $cmt_opts $fc_opts&quot;
-			;;
-		create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
-		show-externals,--*)
-			__gitcomp &quot;--revision=&quot;
-			;;
-		log,--*)
-			__gitcomp &quot;
-				--limit= --revision= --verbose --incremental
-				--oneline --show-commit --non-recursive
-				--authors-file=
-				&quot;
-			;;
-		rebase,--*)
-			__gitcomp &quot;
-				--merge --verbose --strategy= --local
-				--fetch-all $fc_opts
-				&quot;
-			;;
-		commit-diff,--*)
-			__gitcomp &quot;--message= --file= --revision= $cmt_opts&quot;
-			;;
-		info,--*)
-			__gitcomp &quot;--url&quot;
-			;;
-		*)
-			COMPREPLY=()
-			;;
-		esac
-	fi
-}
-
 _git_tag ()
 {
 	local i c=1 f=0
@@ -1565,7 +1132,7 @@ _git_tag ()
 	-m|-F)
 		COMPREPLY=()
 		;;
-	-*|tag)
+	-*|tag|git-tag)
 		if [ $f = 1 ]; then
 			__gitcomp &quot;$(__git_tags)&quot;
 		else
@@ -1587,28 +1154,24 @@ _git ()
 		case &quot;$i&quot; in
 		--git-dir=*) __git_dir=&quot;${i#--git-dir=}&quot; ;;
 		--bare)      __git_dir=&quot;.&quot; ;;
-		--version|-p|--paginate) ;;
-		--help) command=&quot;help&quot;; break ;;
+		--version|--help|-p|--paginate) ;;
 		*) command=&quot;$i&quot;; break ;;
 		esac
 		c=$((++c))
 	done
 
-	if [ -z &quot;$command&quot; ]; then
+	if [ $c -eq $COMP_CWORD -a -z &quot;$command&quot; ]; then
 		case &quot;${COMP_WORDS[COMP_CWORD]}&quot; in
 		--*=*) COMPREPLY=() ;;
 		--*)   __gitcomp &quot;
-			--paginate
 			--no-pager
 			--git-dir=
 			--bare
 			--version
 			--exec-path
-			--work-tree=
-			--help
 			&quot;
 			;;
-		*)     __gitcomp &quot;$(__git_porcelain_commands) $(__git_aliases)&quot; ;;
+		*)     __gitcomp &quot;$(__git_commands) $(__git_aliases)&quot; ;;
 		esac
 		return
 	fi
@@ -1620,15 +1183,12 @@ _git ()
 	am)          _git_am ;;
 	add)         _git_add ;;
 	apply)       _git_apply ;;
-	archive)     _git_archive ;;
 	bisect)      _git_bisect ;;
 	bundle)      _git_bundle ;;
 	branch)      _git_branch ;;
 	checkout)    _git_checkout ;;
 	cherry)      _git_cherry ;;
 	cherry-pick) _git_cherry_pick ;;
-	clean)       _git_clean ;;
-	clone)       _git_clone ;;
 	commit)      _git_commit ;;
 	config)      _git_config ;;
 	describe)    _git_describe ;;
@@ -1636,32 +1196,22 @@ _git ()
 	fetch)       _git_fetch ;;
 	format-patch) _git_format_patch ;;
 	gc)          _git_gc ;;
-	grep)        _git_grep ;;
-	help)        _git_help ;;
-	init)        _git_init ;;
 	log)         _git_log ;;
-	ls-files)    _git_ls_files ;;
 	ls-remote)   _git_ls_remote ;;
 	ls-tree)     _git_ls_tree ;;
 	merge)       _git_merge;;
-	mergetool)   _git_mergetool;;
 	merge-base)  _git_merge_base ;;
-	mv)          _git_mv ;;
 	name-rev)    _git_name_rev ;;
 	pull)        _git_pull ;;
 	push)        _git_push ;;
 	rebase)      _git_rebase ;;
 	remote)      _git_remote ;;
 	reset)       _git_reset ;;
-	revert)      _git_revert ;;
-	rm)          _git_rm ;;
-	send-email)  _git_send_email ;;
 	shortlog)    _git_shortlog ;;
 	show)        _git_show ;;
-	show-branch) _git_show_branch ;;
+	show-branch) _git_log ;;
 	stash)       _git_stash ;;
 	submodule)   _git_submodule ;;
-	svn)         _git_svn ;;
 	tag)         _git_tag ;;
 	whatchanged) _git_log ;;
 	*)           COMPREPLY=() ;;
@@ -1670,17 +1220,10 @@ _git ()
 
 _gitk ()
 {
-	__git_has_doubledash &amp;&amp; return
-
 	local cur=&quot;${COMP_WORDS[COMP_CWORD]}&quot;
-	local g=&quot;$(git rev-parse --git-dir 2&gt;/dev/null)&quot;
-	local merge=&quot;&quot;
-	if [ -f $g/MERGE_HEAD ]; then
-		merge=&quot;--merge&quot;
-	fi
 	case &quot;$cur&quot; in
 	--*)
-		__gitcomp &quot;--not --all $merge&quot;
+		__gitcomp &quot;--not --all&quot;
 		return
 		;;
 	esac
@@ -1689,11 +1232,64 @@ _gitk ()
 
 complete -o default -o nospace -F _git git
 complete -o default -o nospace -F _gitk gitk
+complete -o default -o nospace -F _git_am git-am
+complete -o default -o nospace -F _git_apply git-apply
+complete -o default -o nospace -F _git_bisect git-bisect
+complete -o default -o nospace -F _git_branch git-branch
+complete -o default -o nospace -F _git_bundle git-bundle
+complete -o default -o nospace -F _git_checkout git-checkout
+complete -o default -o nospace -F _git_cherry git-cherry
+complete -o default -o nospace -F _git_cherry_pick git-cherry-pick
+complete -o default -o nospace -F _git_commit git-commit
+complete -o default -o nospace -F _git_describe git-describe
+complete -o default -o nospace -F _git_diff git-diff
+complete -o default -o nospace -F _git_fetch git-fetch
+complete -o default -o nospace -F _git_format_patch git-format-patch
+complete -o default -o nospace -F _git_gc git-gc
+complete -o default -o nospace -F _git_log git-log
+complete -o default -o nospace -F _git_ls_remote git-ls-remote
+complete -o default -o nospace -F _git_ls_tree git-ls-tree
+complete -o default -o nospace -F _git_merge git-merge
+complete -o default -o nospace -F _git_merge_base git-merge-base
+complete -o default -o nospace -F _git_name_rev git-name-rev
+complete -o default -o nospace -F _git_pull git-pull
+complete -o default -o nospace -F _git_push git-push
+complete -o default -o nospace -F _git_rebase git-rebase
+complete -o default -o nospace -F _git_config git-config
+complete -o default -o nospace -F _git_remote git-remote
+complete -o default -o nospace -F _git_reset git-reset
+complete -o default -o nospace -F _git_shortlog git-shortlog
+complete -o default -o nospace -F _git_show git-show
+complete -o default -o nospace -F _git_stash git-stash
+complete -o default -o nospace -F _git_submodule git-submodule
+complete -o default -o nospace -F _git_log git-show-branch
+complete -o default -o nospace -F _git_tag git-tag
+complete -o default -o nospace -F _git_log git-whatchanged
 
 # The following are necessary only for Cygwin, and only are needed
 # when the user has tab-completed the executable name and consequently
 # included the '.exe' suffix.
 #
 if [ Cygwin = &quot;$(uname -o 2&gt;/dev/null)&quot; ]; then
+complete -o default -o nospace -F _git_add git-add.exe
+complete -o default -o nospace -F _git_apply git-apply.exe
 complete -o default -o nospace -F _git git.exe
+complete -o default -o nospace -F _git_branch git-branch.exe
+complete -o default -o nospace -F _git_bundle git-bundle.exe
+complete -o default -o nospace -F _git_cherry git-cherry.exe
+complete -o default -o nospace -F _git_describe git-describe.exe
+complete -o default -o nospace -F _git_diff git-diff.exe
+complete -o default -o nospace -F _git_format_patch git-format-patch.exe
+complete -o default -o nospace -F _git_log git-log.exe
+complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe
+complete -o default -o nospace -F _git_merge_base git-merge-base.exe
+complete -o default -o nospace -F _git_name_rev git-name-rev.exe
+complete -o default -o nospace -F _git_push git-push.exe
+complete -o default -o nospace -F _git_config git-config
+complete -o default -o nospace -F _git_shortlog git-shortlog.exe
+complete -o default -o nospace -F _git_show git-show.exe
+complete -o default -o nospace -F _git_log git-show-branch.exe
+complete -o default -o nospace -F _git_tag git-tag.exe
+complete -o default -o nospace -F _git_log git-whatchanged.exe
 fi
+</diff>
      <filename>.git-completion.bash</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>f92c3989e678771310a32bcbe0dd0be3b5a16635</id>
    </parent>
  </parents>
  <author>
    <name>faithfulgeek</name>
    <email>joe@faithfulgeek.org</email>
  </author>
  <url>http://github.com/faithfulgeek/dotfiles/commit/be7e8086577f59575165e44e32e4fb48c400aa13</url>
  <id>be7e8086577f59575165e44e32e4fb48c400aa13</id>
  <committed-date>2009-03-08T19:04:54-07:00</committed-date>
  <authored-date>2009-03-08T19:04:54-07:00</authored-date>
  <message>Corrected/updated git completions, fixed a bug with command line coloring, and added git aliases</message>
  <tree>229940adafa8d3c560ca4801ca8155f5aab0c9f3</tree>
  <committer>
    <name>faithfulgeek</name>
    <email>joe@faithfulgeek.org</email>
  </committer>
</commit>
