Firstly, I'm aware of a number of similarly worded questions, eg:
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
The message you are seeing (your branch is ahead by one commit) means your native repository has one commit that hasn't been pushed yet. In other words: add and commit are local operations, push, pull and fetch are operations that interact with a remote.
A branch can be both ahead and behind at the same time if you have made changes to your branch, and someone else have made changes on the default branch that you have not merged into your branch yet. I have a branch with 6 commits, and it shows 4 commits behind master in Bitbucket Cloud.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With