How does this actually come about?
I am working in one repo by myself at the moment, so this is my workflow:
Then when I do a git status
it tells me that my branch is ahead by X commits (presumably the same number of commits that I have made). Is it because when you push the code it doesn't actually update your locally cached files (in the .git folders)? git pull
seems to 'fix' this strange message, but I am still curious why it happens, maybe I am using git wrong?
including what branch is printed in the message
My local branch is ahead of master
where do you push/pull the current branch
I am pushing to GitHub and pulling to whichever computer I happen to be working on at that point in time, my local copy is always fully up to date as I am the only one working on it.
it doesn't actually check the remote repo
That is what I thought, I figured that I would make sure my understanding of it was correct.
are you passing some extra arguments to it?
Not ones that I can see, maybe there is some funny config going on on my end?
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
This question is related to
git
git-commit
git fetch
will resolve this for you
If my understanding is correct, your local (cached) origin/master
is out of date. This command will update the repository state from the server.
I had this issue on my stage server where I do only pulls. And hard reset helped me to clean HEAD to the same as remote.
git reset --hard origin/master
So now I have again:
On branch master
Your branch is up-to-date with 'origin/master'.
Step 1 : git checkout <branch_name>
Step 2 : git pull -s recursive -X theirs
Step 3 : git reset --hard origin/<branch_name>
More details : https://stackoverflow.com/a/39698570/2439715
Enjoy.
Though this question is a bit old...I was in a similar situation and my answer here helped me fix a similar issue I had
First try with push -f
or force option
If that did not work it is possible that (as in my case) the remote repositories (or rather the references to remote repositories that show up on git remote -v
) might not be getting updated.
Outcome of above being your push synced your local/branch with your remote/branch however, the cache in your local repo still shows previous commit (of local/branch ...provided only single commit was pushed) as HEAD.
To confirm the above clone the repo at a different location and try to compare local/branch HEAD and remote/branch HEAD. If they both are same then you are probably facing the issue I did.
Solution:
$ git remote -v
github [email protected]:schacon/hw.git (fetch)
github [email protected]:schacon/hw.git (push)
$ git remote add origin git://github.com/pjhyett/hw.git
$ git remote -v
github [email protected]:schacon/hw.git (fetch)
github [email protected]:schacon/hw.git (push)
origin git://github.com/pjhyett/hw.git (fetch)
origin git://github.com/pjhyett/hw.git (push)
$ git remote rm origin
$ git remote -v
github [email protected]:schacon/hw.git (fetch)
github [email protected]:schacon/hw.git (push)
Now do a push -f
as follows
git push -f github master
### Note your command does not have origin
anymore!
Do a git pull
now
git pull github master
on git status
receive
# On branch master
nothing to commit (working directory clean)
I hope this useful for someone as the number of views is so high that searching for this error almost always lists this thread on the top
Also refer gitref for details
If you get this message after doing a commit in order to untrack file in the branch, try making some change in any file and perform commit. Apparently you can't make single commit which includes only untracking previously tracked file. Finally this post helped me solve whole problem https://help.github.com/articles/removing-files-from-a-repository-s-history/. I just had to remove file from repository history.
The answers that suggest git pull
or git fetch
are correct.
The message is generated when git status
sees a difference between .git/FETCH_HEAD
and .git/refs/remotes/<repository>/<branch>
(e.g. .git/refs/remotes/origin/master
).
The latter file records the HEAD from the last fetch (for the repository/branch). Doing git fetch
updates both files to the branch's current HEAD.
Of course if there is nothing to fetch (because the local repository is already up-to-date) then .git/FETCH_HEAD
doesn't change.
This worked for me
git reset --hard origin/master
The output must look like
On branch dev
HEAD is now at ae1xc41z Last commit message
In my case it was because I switched to master using
git checkout -B master
Just to pull the new version of it instead of
git checkout master
The first command resets the head of master to my latest commits
I used
git reset --hard origin/master
To fix that
I went through every solution on this page, and fortunately @anatolii-pazhyn commented because his solution was the one that worked. Unfortunately I don't have enough reputation to upvote him, but I recommend trying his solution first:
git reset --hard origin/master
Which gave me:
HEAD is now at 900000b Comment from my last git commit here
I also recommend:
git rev-list origin..HEAD
# to see if the local repository is ahead, push needed
git rev-list HEAD..origin
# to see if the local repository is behind, pull needed
You can also use:
git rev-list --count --left-right origin/master...HEAD
# if you have numbers for both, then the two repositories have diverged
Best of luck
I think you’re misreading the message — your branch isn’t ahead of master
, it is master
. It’s ahead of origin/master
, which is a remote tracking branch that records the status of the remote repository from your last push
, pull
, or fetch
. It’s telling you exactly what you did; you got ahead of the remote and it’s reminding you to push.
I had this same problem on a Windows machine. When I ran a git pull origin master
command, I would get the "ahead of 'origin/master' by X commits" warning. I found that if I instead ran git pull origin
and did NOT specify the branch, then I would no longer receive the warning.
Then when I do a git status it tells me that my branch is ahead by X commits (presumably the same number of commits that I have made).
My experience is in a team environment with many branches. We work in our own feature branches (in local clones) and it was one of those that git status
showed I was 11 commits ahead. My working assumption, like the question's author, was that +11 was from commits of my own.
It turned out that I had pulled in changes from the common develop
branch into my feature branch many weeks earlier -- but forgot! When I revisited my local feature branch today and did a git pull origin develop
the number jumped to +41 commits ahead. Much work had been done in develop
and so my local feature branch was even further ahead of the feature branch on the origin
repository.
So, if you get this message, think back to any pulls/merges you might have done from other branches (of your own, or others) you have access to. The message just signals you need to git push
those pull
ed changes back to the origin
repo ('tracking branch') from your local repo to get things sync'd up.
I actually had this happening when I was doing a switch/checkout with TortiseGIT.
My problem was that I had created the branch based on another local branch. It created a "merge" entry in /.git/config
that looked something like this:
[branch "web"]
merge = refs/heads/develop
remote = gitserver
Where whenever I switched to the "web" branch, it was telling me I was 100+ commits ahead of develop. Well, I was no longer committing to develop so that was true. I was able to simply remove this entry and it seems to be functioning as expected. It is properly tracking with the remote ref instead of complaining about being behind the develop branch.
As Vikram said, this Stack Overflow thread is the top result in Google when searching for this problem so I thought I'd share my situation and solution.
Use
git pull --rebase
The --rebase option means that git will move your local commit aside, synchronise with the remote and then try to apply your commits from the new state.
I would like to reiterate the same as mentioned by @Marian Zburlia above. It worked for me and would suggest the same to others.
git pull origin develop
should be followed by $ git pull --rebase
.
This will remove the comments coming up on the $ git status
after the latest pull.
Someone said you might be misreading your message, you aren't. This issue actually has to do with your <project>/.git/config
file. In it will be a section similar to this:
[remote "origin"]
url = <url>
fetch = +refs/heads/*:refs/remotes/origin/*
If you remove the fetch line from your project's .git/config file you'll stop the "Your branch is ahead of 'origin/master' by N
commits." annoyance from occurring.
Or so I hope. :)
It just reminds you the differences between the current branch and the branch which does the current track. Please provide more info, including what branch is printed in the message and where do you push/pull the current branch.
Source: Stackoverflow.com