diff --git a/builtin/fetch.c b/builtin/fetch.c index fab3fce512..fccc9cbea3 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -146,7 +146,9 @@ static struct ref *get_ref_map(struct transport *transport, struct remote *remote = transport->remote; struct branch *branch = branch_get(NULL); int has_merge = branch_has_merge_config(branch); - if (remote && (remote->fetch_refspec_nr || has_merge)) { + if (remote && + (remote->fetch_refspec_nr || + (has_merge && !strcmp(branch->remote_name, remote->name)))) { for (i = 0; i < remote->fetch_refspec_nr; i++) { get_fetch_map(remote_refs, &remote->fetch[i], &tail, 0); if (remote->fetch[i].dst && diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh index 4eb10f602f..8fbd894e7f 100755 --- a/t/t5510-fetch.sh +++ b/t/t5510-fetch.sh @@ -240,6 +240,12 @@ test_expect_success 'fetch with a non-applying branch..merge' ' git fetch blub ' +test_expect_success 'fetch from GIT URL with a non-applying branch..merge' ' + git update-ref -d FETCH_HEAD && + git fetch one && + git rev-parse --verify FETCH_HEAD +' + # the strange name is: a\!'b test_expect_success 'quoting of a strangely named repo' ' test_must_fail git fetch "a\\!'\''b" > result 2>&1 &&