Add 'git subtree merge' and 'git subtree pull'.

These are simple shortcuts for 'git merge -s subtree' and 'git pull -s
subtree', but it makes sense to have it all in one command.
diff --git a/git-subtree.sh b/git-subtree.sh
index 2dc99e8..f2a1c6a 100755
--- a/git-subtree.sh
+++ b/git-subtree.sh
@@ -8,13 +8,15 @@
     set -- -h
 fi
 OPTS_SPEC="\
-git subtree add <--prefix=prefix <commit>
-git subtree split [options...] <--prefix=prefix> <commit...>
-git subtree merge 
+git subtree add --prefix=<prefix> <commit>
+git subtree split [options...] --prefix=<prefix> <commit...>
+git subtree merge --prefix=<prefix> <commit>
+git subtree pull  --prefix=<prefix> <repository> <refspec...>
 --
 h,help        show the help
 q             quiet
 prefix=       the name of the subdir to split out
+ options for 'split'
 onto=         try connecting new tree to an existing one
 rejoin        merge the new branch back into HEAD
 ignore-joins  ignore prior --rejoin commits
@@ -68,27 +70,29 @@
 command="$1"
 shift
 case "$command" in
-	add|merge) default= ;;
+	add|merge|pull) default= ;;
 	split) default="--default HEAD" ;;
 	*) die "Unknown command '$command'" ;;
 esac
 
-revs=$(git rev-parse $default --revs-only "$@") || exit $?
-
 if [ -z "$prefix" ]; then
 	die "You must provide the --prefix option."
 fi
 dir="$prefix"
 
-dirs="$(git rev-parse --no-revs --no-flags "$@")" || exit $?
-if [ -n "$dirs" ]; then
-	die "Error: Use --prefix instead of bare filenames."
+if [ "$command" != "pull" ]; then
+	revs=$(git rev-parse $default --revs-only "$@") || exit $?
+	dirs="$(git rev-parse --no-revs --no-flags "$@")" || exit $?
+	if [ -n "$dirs" ]; then
+		die "Error: Use --prefix instead of bare filenames."
+	fi
 fi
 
 debug "command: {$command}"
 debug "quiet: {$quiet}"
 debug "revs: {$revs}"
 debug "dir: {$dir}"
+debug "opts: {$*}"
 debug
 
 cache_setup()
@@ -258,17 +262,23 @@
 	fi
 }
 
-cmd_add()
+ensure_clean()
 {
-	if [ -e "$dir" ]; then
-		die "'$dir' already exists.  Cannot add."
-	fi
 	if ! git diff-index HEAD --exit-code --quiet; then
 		die "Working tree has modifications.  Cannot add."
 	fi
 	if ! git diff-index --cached HEAD --exit-code --quiet; then
 		die "Index has modifications.  Cannot add."
 	fi
+}
+
+cmd_add()
+{
+	if [ -e "$dir" ]; then
+		die "'$dir' already exists.  Cannot add."
+	fi
+	ensure_clean
+	
 	set -- $revs
 	if [ $# -ne 1 ]; then
 		die "You must provide exactly one revision.  Got: '$revs'"
@@ -357,7 +367,22 @@
 
 cmd_merge()
 {
-	die "merge command not implemented yet"
+	ensure_clean
+	
+	set -- $revs
+	if [ $# -ne 1 ]; then
+		die "You must provide exactly one revision.  Got: '$revs'"
+	fi
+	rev="$1"
+	
+	git merge -s subtree $rev
 }
 
-"cmd_$command"
+cmd_pull()
+{
+	ensure_clean
+	set -x
+	git pull -s subtree "$@"
+}
+
+"cmd_$command" "$@"