On Mon, Nov 07, 2011 at 05:48:25PM +0800, Tony Wang wrote: > > It was on purpose. HEAD may contain a tag, in which case > > lookup_commit() would to return a commit fail while > > lookup_commit_reference() can peel the tag to the commit. > > However, I tried to make it lookup_commit and it worked as expected. I'll try to read some detail. and the strange value of branch "s/origin/b" in your previous message.. > > > > > I tried to debug, and found after this > > > merge.c:1104 > > > head_commit = lookup_commit_or_die(head_sha1, "HEAD"); > > > the variable branch becomes "s/origin/b", which is previously "b". ..led me to think that it's because branch points to the static buffer returned by by resolve_ref(). lookup_commit_reference() may call resolve_ref() again and change the buffer value, which also changes "branch" variable. So, does this help? -- 8< -- diff --git a/builtin/merge.c b/builtin/merge.c index 581f494..4f20833 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -1029,7 +1029,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) * Check if we are _not_ on a detached HEAD, i.e. if there is a * current branch. */ - branch = resolve_ref("HEAD", head_sha1, 0, &flag); + branch = xstrdup(resolve_ref("HEAD", head_sha1, 0, &flag)); if (branch && !prefixcmp(branch, "refs/heads/")) branch += 11; if (!branch || is_null_sha1(head_sha1)) -- 8< -- -- Duy -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html