case "$1" in
        */*)
                # Not so fast.  This could be the partial URL shorthand...
-               token=$(expr "$1" : '\([^/]*\)/')
-               remainder=$(expr "$1" : '[^/]*/\(.*\)')
+               token=$(expr "z$1" : 'z\([^/]*\)/')
+               remainder=$(expr "z$1" : 'z[^/]*/\(.*\)')
                if test -f "$GIT_DIR/branches/$token"
                then
                        echo branches-partial
        branches)
                sed -e 's/#.*//' "$GIT_DIR/branches/$1" ;;
        branches-partial)
-               token=$(expr "$1" : '\([^/]*\)/')
-               remainder=$(expr "$1" : '[^/]*/\(.*\)')
+               token=$(expr "z$1" : 'z\([^/]*\)/')
+               remainder=$(expr "z$1" : 'z[^/]*/\(.*\)')
                url=$(sed -e 's/#.*//' "$GIT_DIR/branches/$token")
                echo "$url/$remainder"
                ;;
                force=
                case "$ref" in
                +*)
-                       ref=$(expr "$ref" : '\+\(.*\)')
+                       ref=$(expr "z$ref" : 'z+\(.*\)')
                        force=+
                        ;;
                esac
-               expr "$ref" : '.*:' >/dev/null || ref="${ref}:"
-               remote=$(expr "$ref" : '\([^:]*\):')
-               local=$(expr "$ref" : '[^:]*:\(.*\)')
+               expr "z$ref" : 'z.*:' >/dev/null || ref="${ref}:"
+               remote=$(expr "z$ref" : 'z\([^:]*\):')
+               local=$(expr "z$ref" : 'z[^:]*:\(.*\)')
                case "$remote" in
                '') remote=HEAD ;;
                refs/heads/* | refs/tags/* | refs/remotes/*) ;;
                *) local="refs/heads/$local" ;;
                esac
 
-               if local_ref_name=$(expr "$local" : 'refs/\(.*\)')
+               if local_ref_name=$(expr "z$local" : 'zrefs/\(.*\)')
                then
                   git-check-ref-format "$local_ref_name" ||
                   die "* refusing to create funny ref '$local_ref_name' locally"
 
 resolve_alternates () {
        # original URL (xxx.git)
-       top_=`expr "$1" : '\([^:]*:/*[^/]*\)/'`
+       top_=`expr "z$1" : 'z\([^:]*:/*[^/]*\)/'`
        while read path
        do
                case "$path" in