Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

why does it say "Your branch is ahead of origin/master by 857 commits" when I need to *pull* origin master

Tags:

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 
like image 369
Anentropic Avatar asked Jun 14 '12 12:06

Anentropic


People also ask

What does it mean when your branch is ahead?

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.

How can a branch be ahead and behind Master?

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.


1 Answers

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.

like image 127
Christopher Avatar answered Sep 29 '22 10:09

Christopher