why does it say "Your branch is ahead of origin/master by 857 commits" when I need to *pull* origin master
git
Solution
You are over thinking this. The message isn't saying the remote is behind. It's saying your local repository's recorded commit for 'origin/master' is. At no point in generating that message did git communicate with a remote. It simply looked into the .git directory, and returned the contents of `.git/refs/remotes/origin/master`. Try it yourself. Both of these commands should return the same thing from the top-level of the repository:
cat .git/refs/remotes/origin/master
git rev-parse origin/master
The second command is simply a plumbing command for finding the 'origin/master' pointer. You could replace 'origin/master' with any branch to get the most recent commit on that branch.
That message is telling you is that your local 'master' is ahead of the commit returned by 'git rev-parse origin/master' by 857 commits. How did this situation arise? I can't say exactly, but I'd put considerable money on you accidentally merging a different branch into 'master'. Every time I've seen this problem, it's a bad merge from user error.
First, issue `git fetch origin` to make sure that 'origin/master' pointer is up-to-date. Then, study your `git log`. Look for something recent you don't expect. Download a program like tig or use `gitk` to get a visual graph of your commit history. It's a good bet you accidentally issued `git pull stable` while checked out on 'master'. Or something similar.
Problem
Firstly, I'm aware of a number of similarly worded questions, eg: - How can I find the location of origin/master in git, and how do I change it? - git: Your branch is Ahead by X commits - Git: Branch is ahead by X commits. Doesn't help doing git pull - pull-only repo's 'git status' saying the branch is ahead of origin/master. Why? None of them (AFAICT) has an answer that matches my version of this question. My situation is: ``` $ git status # On branch stable nothing to commit (working directory clean) $ git checkout master Switched to branch 'master' Your branch is ahead of 'origin/master' by 857 commits. ``` In the existing questions the accepted and upvoted answers mostly concur that it means literally what it says... I'm ahead and I need to push my new commits to origin/master. I know that actually the opposite situation is true, that my local `master` branch is behind the remote `origin/master` and actually I need to `git pull origin master` before doing some work on it locally. (or possibly just `git fetch origin` ?) My question is... is there some reason for the message to be worded `Your branch is ahead of 'origin/master' by 857 commits.` such that it literally makes sense? Because the way I understand it at the moment the meaning is the opposite of what the message says ('my branch' is behind origin/master). Or does it really mean: "The HEAD of the remote master branch is ahead of your local origin/master tracking branch" ? update FWIW I am working in a team of half a dozen other developers. We all pull, commit and push etc many times a day without problem. I don't have a bug here... I'm just trying to understand why Git words its message this way - whether the wording itself is badly chosen, or if there's some underlying concept of Git that causes them to word it this way and which I'm not understanding properly. more info here is what I guess may be the relevant part of output from `git config -l` ``` remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* remote.origin.url=https://code.google.com/a/google.com/p/xxxxx/ branch.master.remote=origin branch.master.merge=refs/heads/master branch.master.mergeoptions=--no-ff ```