From: Junio C Hamano Date: Tue, 13 Dec 2005 19:21:19 GMT Subject: Re: git-merge fails when trying to merge from a tag Message-ID: <7vy82o951s.fsf@assigned-by-dhcp.cox.net> In-Reply-To: <20051213175516.GA3695@hpsvcnb.fc.hp.com> Carl Baldwin writes: > I just tried to merge using a tag object. Thanks for the report. > % git merge "Merging release-0.3.1" HEAD refs/tags/release-0.3.1 Once I considered changing commit-tree to take any committish after -p, but thought the command is a low level primitive and the user should know what he is doing, but apparently, git-merge does not know what it is doing ;-). In fact, I never use "merge" myself, and haven't noticed this breakage until now (you would notice that the Everyday document never talks about "git merge"). Instead, I always do this: $ git pull . tag release-0.3.1 But you are right. It is advertised as the end-user command and demonstrated in the tutorial. How about this patch? I haven't looked at what (old) git-resolve and git-octopus commands do --- they may need similar parameter massaging. -- >8 -- [PATCH] allow merging any committish Although "git-merge" is advertised as the end-user level command (instead of being a "git-pull" backend), it was not prepared to take tag objects that point at commits and barfed when fed one. Sanitize the input while we validate them, for which we already have a loop. Signed-off-by: Junio C Hamano --- diff --git a/git-merge.sh b/git-merge.sh index a221daa..d25ae4b 100755 --- a/git-merge.sh +++ b/git-merge.sh @@ -97,11 +97,14 @@ head=$(git-rev-parse --verify "$1"^0) || shift # All the rest are remote heads +remoteheads= for remote do - git-rev-parse --verify "$remote"^0 >/dev/null || + remotehead=$(git-rev-parse --verify "$remote"^0) || die "$remote - not something we can merge" + remoteheads="${remoteheads}$remotehead " done +set x $remoteheads ; shift case "$#" in 1)