TL;DR

本地没有更改,只是从远程pull,但是显示Your branch is ahead of ‘origin/master’ by 3 commits.
原因是从远程更新了本地的master 分支,但是没有更新本地的追踪分支 origin/master, 解决方案是运行:

git fetch

让本地追踪分支(tracing branch)和远程同步
太长不看版到此结束,以下是具体原因和发现问题的经过。

问题

从服务器或者github clone下来之后,在本地还没有add commit等操作之前,发现remote有更新。
但是:

> git pull origin master
> Your branch is ahead of 'origin/master' by 3 commits.

原因

目前大家碰到的主要原因都是:本地有了修改添加提交等操作,所以理所应当的ahead远程分支。这个解决方案没啥好解决的,该push就push。

实际的问题在与我本地没有提交。
找了一些答案总不得要领,最后在这个链接找到了提示,虽然这个解题过程并不对,但是给了一个正确解决方案和重要的提示:

git fetch # 解决本次问题
git pull # 以后不要用 git pull origin master

方法应该是可行的,但是:

  1. git fetch 做了什么,git pull origin master 不是 fetch 加 merge吗?
  2. git pull 和 git pull origin master 有什么不同。

从这两个角度找答案,最终理清了整个事情。
相似问题参考
git pull 等的区别

'origin/master 并不是远程分支,而是追踪远程分支的一个本地分支
当 git pull 的时候,会git fetch 更新 origin/master这个本地分支让它和服务器一致,另一方面会merge 本地的master分支。
但是git pull origin master的时候,只会更新本地的master 分支,而origin/master 这个老的tracing分支,他并没有被更新,也就会提示ahead了。

至于 git pull 和git pull origin master,git pull 没有指定分支,所以tracing branch也会从服务器拉下来。

解决方案

git fetch

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐