Support bash completion of refs/remote.
[gitweb.git] / git-merge.sh
index 25deb1e867ec01c65d223733a22edd98f18e241c..75af10d3e431edf6f7447ab4a3dfcf84e994a2ef 100755 (executable)
@@ -159,6 +159,24 @@ then
        shift
        head_arg="$1"
        shift
+elif ! git-rev-parse --verify HEAD >/dev/null 2>&1
+then
+       # If the merged head is a valid one there is no reason to
+       # forbid "git merge" into a branch yet to be born.  We do
+       # the same for "git pull".
+       if test 1 -ne $#
+       then
+               echo >&2 "Can merge only exactly one commit into empty head"
+               exit 1
+       fi
+
+       rh=$(git rev-parse --verify "$1^0") ||
+               die "$1 - not something we can merge"
+
+       git-update-ref -m "initial pull" HEAD "$rh" "" &&
+       git-read-tree --reset -u HEAD
+       exit
+
 else
        # We are invoked directly as the first-class UI.
        head_arg=HEAD
@@ -170,13 +188,13 @@ else
        # in this loop.
        merge_name=$(for remote
                do
-                       rh=$(git-rev-parse --verify "$remote"^0 2>/dev/null)
+                       rh=$(git-rev-parse --verify "$remote"^0 2>/dev/null) &&
                        if git show-ref -q --verify "refs/heads/$remote"
                        then
                                what=branch
                        else
                                what=commit
-                       fi
+                       fi &&
                        echo "$rh               $what '$remote'"
                done | git-fmt-merge-msg
        )
@@ -191,7 +209,7 @@ test "$rloga" = '' && rloga="merge: $@"
 remoteheads=
 for remote
 do
-       remotehead=$(git-rev-parse --verify "$remote"^0) ||
+       remotehead=$(git-rev-parse --verify "$remote"^0 2>/dev/null) ||
            die "$remote - not something we can merge"
        remoteheads="${remoteheads}$remotehead "
 done