Firstly, I\'m aware of a number of similarly worded questions, eg:
git rebase -p
It will say First, rewinding head to replay your work on top of it...
and you'll be all set, because there's no work to replay.
I had the same issue. Like the chosen solution points out, I think the problem was the origin/master pointer being out-of-date. I mostly only do git pull origin master
and not fetch
.
Since I know I didn't have local changes, I hard reset to master and then fetched to update the pointer, and finally pulled to catch up on the commits on the remote master branch. Like this:
git reset --hard origin/master
git fetch origin
git pull origin master
Hope this helps someone in the future too.
Edit: also useful On this other question, I found a great solution with useful commands. These worked for me when the above didn't!
If you get this message after doing a
git pull remote branch
, try following it up with agit fetch
. (Optionally, rungit fetch -p
to prune deleted branches from the repo)Fetch seems to update the local representation of the remote branch, which doesn't necessarily happen when you do a
git pull remote branch
.
I had this question too. I searched a bit and found out that, we occasionally run 'git pull upstream master' to fetch the latest changes from upstream master to our local master which is a forked branch. However these updated changes are not pushed to our remote master yet. Hence the message says 'our local is x commits ahead of remote master'. Before proceeding with new code or modification in forked branch environment, it's better to run the following commands
git checkout master_branch;
git pull upstream master;
git push
In the end, the Actual solution for the question to correct the problem:
It was because it needed a git push, after a merge. This just happened to me too, same error message. Andy magoon was right also, because when I did the push, I see a clean slate now, with no bytes having been pushed. However, rebasing is not usually the best course.
$ git status ./
On branch master-blah1
Your branch is ahead of 'origin/master-blah1' by 869 commits.
(use "git push" to publish your local commits)
nothing to commit, working directory clean
$ git push
Counting objects: 7, done.
Delta compression using up to 48 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 653 bytes | 0 bytes/s, done.
Total 7 (delta 4), reused 0 (delta 0)
$ git status ./
On branch master-blah1
Your branch is up-to-date with 'origin/master-blah1'.
nothing to commit, working directory clean
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.