On Sat, Sep 12, 2009 at 11:01:45PM +0300, John Tapsell wrote: > So anyway, I tried to do a "git pull" and it gives me the misleading error: > > You asked me to pull without telling me which branch you > want to merge with, and 'branch.master.merge' in > your configuration file does not tell me either. Please > name which branch you want to merge on the command line and > try again (e.g. 'git pull <repository> <refspec>'). > See git-pull(1) for details on the refspec. > > [...] > > But the actual problem is that "master" doesn't exist on origin. So > basically I _have_ told it what branch.master.remote and > branch.master.merge etc is, it's just that they don't appear to exist. Ugh. That is horrible. It's an artifact of the (IMHO) brain-dead way that pull and fetch interact. Pull doesn't actually look at the configuration at all. It just calls fetch, and then fetch writes out a file containing the refs it pulled, some of which may be marked with a magic "not-for-merge" flag. So we see that nothing is available for merging and guess that it must not have been configured. Which is of course wrong in your case; it just didn't exist. I think it is enough for git-pull to just check whether the config exists, and if so, guess that the ref was simply not fetched. IOW, this: -- >8 -- Subject: [PATCH] pull: make "nothing to merge" error message more accurate When pull sees that no branches are available for merge and that we have a current branch, it assumes the problem is that we had no branch.*.merge configuration. But it may also be the case that we simply didn't pull the configured ref (probably because it doesn't exist). Let's distinguish those two cases. Signed-off-by: Jeff King <peff@xxxxxxxx> --- git-pull.sh | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/git-pull.sh b/git-pull.sh index 0bbd5bf..4ddd537 100755 --- a/git-pull.sh +++ b/git-pull.sh @@ -89,6 +89,9 @@ error_on_no_merge_candidates () { done curr_branch=${curr_branch#refs/heads/} + upstream=`git config "branch.$curr_branch.merge" || + git config "branch.$curr_branch.rebase"` + upstream_short=`echo "$upstream" | sed "s|refs/heads/||"` if [ -z "$curr_branch" ]; then echo "You are not currently on a branch, so I cannot use any" @@ -96,7 +99,7 @@ error_on_no_merge_candidates () { echo "Please specify which branch you want to merge on the command" echo "line and try again (e.g. 'git pull <repository> <refspec>')." echo "See git-pull(1) for details." - else + elif [ -z "$upstream" ]; then echo "You asked me to pull without telling me which branch you" echo "want to merge with, and 'branch.${curr_branch}.merge' in" echo "your configuration file does not tell me either. Please" @@ -114,6 +117,10 @@ error_on_no_merge_candidates () { echo " remote.<nickname>.fetch = <refspec>" echo echo "See git-config(1) for details." + else + echo "Your configuration specified for us to pull the ref" + echo "'$upstream_short', but we were unable to fetch it from" + echo "the remote." fi exit 1 } -- 1.6.5.rc0.201.g76b4d.dirty -- 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