这到底是怎么发生的呢?

我在一个回购工作由自己的时刻,所以这是我的工作流程:

改变文件 提交 重复1-2次直到满意 推送至master

然后,当我执行git状态时,它告诉我我的分支领先X次提交(大概与我所做的提交数量相同)。是不是因为当您推送代码时,它实际上并没有更新本地缓存的文件(在.git文件夹中)?git拉似乎“修复”这个奇怪的消息,但我仍然好奇为什么会发生这种情况,也许我使用git错误?


包括在消息中打印的分支

我在当地的分公司走在主人前面

你在哪里推/拉当前的分支

我推送到GitHub,并拉到我碰巧在那个时间点上工作的任何一台计算机,我的本地副本总是完全最新的,因为我是唯一一个在它上工作的人。

它实际上并不检查远程回购

这就是我的想法,我想我要确保我对它的理解是正确的。

你是否给它传递了一些额外的参数?

不是我能看到的,也许我这边有什么奇怪的配置?

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)

当前回答

我浏览了本页上的每个解决方案,幸运的是@anatolii-pazhyn评论了,因为他的解决方案是有效的。不幸的是,我没有足够的声誉来支持他,但我建议先试试他的解决方案:

git reset --hard origin/master

这给了我:

HEAD is now at 900000b Comment from my last git commit here

我还建议:

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

你还可以使用:

git rev-list --count --left-right origin/master...HEAD
# if you have numbers for both, then the two repositories have diverged

祝你好运

其他回答

我在一台Windows电脑上遇到了同样的问题。当我运行一个git拉origin master命令时,我会得到“在'origin/master'前面X次提交”警告。我发现,如果我不是运行git拉原点,没有指定分支,那么我将不再收到警告。

虽然这个问题有点老了……我也遇到过类似的情况,我的回答帮助我解决了一个类似的问题

首先尝试使用push -f或force选项

如果这不起作用,就有可能(就像我的情况一样)远程存储库(或者是显示在git remote -v上的对远程存储库的引用)可能没有得到更新。

上面的结果是你的推送同步你的本地/分支与你的远程/分支,然而,在你的本地回购缓存仍然显示以前的提交(本地/分支…如果只有一次提交被推)作为HEAD。

要确认上述操作,在不同的位置克隆回购,并尝试比较本地/分支HEAD和远程/分支HEAD。如果两者都相同,那么你可能会遇到我遇到的问题。

解决方案:

$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)
$ git remote add origin git://github.com/pjhyett/hw.git
$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com: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  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)

现在按如下方式执行push -f

git push -f github master ###注意你的命令不再有原点!

现在做个少不更事的拉 Git拉github master

在git状态接收

#在分支master上

没有要提交的内容(工作目录清洁)

我希望这对某些人有用,因为观看的数量是如此之高,以至于搜索这个错误几乎总是把这个线程列在顶部

有关详细信息,请参阅gitref

我得到了以下与实际问题相关的问题,你的分支领先于'起源/测试/KB-200' 17次提交

原因:上周我创建了PR进行审查,然后我关闭了项目。然后今天,我打开了项目,在同一个分支(测试/KB-200)中做了轻微的改变,我首先运行git pull。这个拉包含了其他开发人员在项目中工作的18个新提交,这使得我的本地分支领先于远程分支,因此我得到了这条消息。所以我只需要运行以下命令:

git push origin testing/KB-200

然后所有的都是同步的和最新的。[关于分支测试/KB-200您的分支是最新的'origin/testing/KB-200']

就我而言,这是因为我改用了熟练使用

 git checkout -B master

把它的新版本拉出来,而不是

 git checkout master

第一个命令将master的头重置为最近的提交

我使用

git reset --hard origin/master

为了解决这个问题

实际上,当我使用TortiseGIT进行切换/签出时,就发生了这种情况。

我的问题是,我基于另一个本地分支创建了这个分支。它在/中创建了一个“合并”条目。Git /config看起来是这样的:

[branch "web"]
    merge = refs/heads/develop
    remote = gitserver

每当我切换到“web”分支时,它都会告诉我,我比开发提前了100多个提交。好吧,我不再致力于开发,这是真的。我可以简单地删除这个条目,它似乎像预期的那样运行。它正确地跟踪远程引用,而不是抱怨落后于开发分支。

正如Vikram所说,当搜索这个问题时,这个Stack Overflow线程是谷歌的顶部结果,所以我想分享我的情况和解决方案。