If we are trying to set the upstream config for a branch, the create_branch function will check both that the name resolves as a ref, and that it is either a local or remote-tracking branch. However, before we do so we run get_sha1 on it to find out whether it resolves at all (since the create_branch function is also used to create actual branches, it wants to know where to start the new branch). This means that if you feed a ref that does not exist to "branch --set-upstream-to", rather than getting a helpful message about tracking, you only get "not a valid object name". Signed-off-by: Jeff King <peff@xxxxxxxx> --- branch.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/branch.c b/branch.c index 1acbd4e..060e9e3 100644 --- a/branch.c +++ b/branch.c @@ -199,6 +199,8 @@ N_("Cannot setup tracking information; starting point is not a branch."); static const char upstream_not_branch[] = N_("Cannot setup tracking information; starting point is not a branch."); +static const char upstream_missing[] = +N_("Cannot setup tracking information; starting point does not exist"); void create_branch(const char *head, const char *name, const char *start_name, @@ -227,8 +229,11 @@ void create_branch(const char *head, } real_ref = NULL; - if (get_sha1(start_name, sha1)) + if (get_sha1(start_name, sha1)) { + if (explicit_tracking) + die(_(upstream_missing)); die("Not a valid object name: '%s'.", start_name); + } switch (dwim_ref(start_name, strlen(start_name), sha1, &real_ref)) { case 0: -- 1.8.2.rc0.33.gd915649 -- 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