git:你的分支在X提交之前
这究竟是怎么发生的?
目前我正在一个回购工作中,所以这是我的工作stream程:
- 更改文件
- 承诺
- 重复1-2直到满意
- 推到主
然后当我做一个git status
它告诉我,我的分支在X提交前面 (大概是我提交的提交数量相同)。 是因为当你推动代码时,它实际上并没有更新你的本地caching文件(在.git文件夹中)? git pull
似乎'修复'这个奇怪的消息,但我仍然好奇为什么会发生,也许我使用Git错误?
包括邮件中打印的分支
我的本地分支在主人之前
你在哪里推/拉当前分支
我正在向GitHub求助,并将其拉到那个时候正在处理的计算机上,我的本地副本总是最新的,因为我是唯一一个正在处理这个问题的人。
它实际上不检查远程回购
这是我的想法,我想我会确保我的理解是正确的。
你是否传递了一些额外的参数?
不是我可以看到的,也许有一些有趣的configuration在我的最后?
$ git status # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # nothing to commit (working directory clean)
如果你在做一个git pull remote branch
之后得到这个消息,试着用git fetch
。 (或者,运行git fetch -p
从修订版中删除已删除的分支)
提取似乎更新远程分支的本地表示,当你做一个git pull remote branch
不一定发生。
使用
git pull --rebase
–rebase选项意味着git会把你的本地提交放在一边,与远程同步,然后尝试从新的状态应用你的提交。
我认为你错误的信息 – 你的分支不在master
,这是 master
。 它位于origin/master
,这是一个远程跟踪分支 ,用于logging最后一次push
, pull
或fetch
的远程仓库的状态。 这是告诉你,你做了什么; 你领先于遥控器,它提醒你推动。
有人说你可能会误解你的信息,你不是。 这个问题实际上与你的<project>/.git/config
文件有关。 在这将是一个类似的部分:
[remote "origin"] url = <url> fetch = +refs/heads/*:refs/remotes/origin/*
如果从项目的.git / config文件中删除获取线,则会停止“您的分支由N
提交提前到达'origin / master'”。 烦恼发生。
或者我希望。 🙂
使用这3个简单的命令
第1步 : git checkout <branch_name>
第2步 : git pull -s recursive -X theirs
第3步 : git reset --hard origin/<branch_name>
更多细节: https : //stackoverflow.com/a/39698570/2439715
请享用。
在我的情况下,这是因为我切换到主使用
git checkout -B master
只是拉新版本而不是
git checkout master
第一个命令重置主人的头到我最近的提交
我用了
git reset --hard origin/master
解决这个问题
我在Windows机器上遇到同样的问题。 当我运行一个git pull origin master
命令时,我会通过“X提交”警告获得“原点/主”的前面。 我发现,如果我反而运行git pull origin
,并没有指定分支,那么我不会再收到警告。
它只是提醒你当前分支和当前分支的分支之间的区别。 请提供更多信息,包括在信息中打印哪个分支,以及在哪里推/拉当前分支。
虽然这个问题有点老了,但我也遇到了类似的情况,我的回答帮助我解决了一个类似的问题
首先尝试push -f
或强制选项
如果这样做不起作用,那么(在我的情况下)远程仓库(或者远程仓库的引用在git remote -v
上显示)可能没有得到更新。
上面的结果是你的推送同步你的本地/分支与你的远程/分支,然而,本地仓库中的caching仍然显示先前的提交(本地/分支…提供只有一个提交被推)为头。
要确认上述克隆在不同位置的回购,并尝试比较本地/分行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
###注意你的命令不再有origin
了!
做一个git pull
现在git pull github master
在git status
接收
# On branch master
nothing to commit (working directory clean)
我希望这对于有用的人来说是非常重要的,因为search这个错误几乎总是在顶部列出这个线程
有关详细信息,请参阅gitref
当我使用TortiseGIT进行切换/结帐时,我确实发生过这种情况。
我的问题是,我已经创build了基于另一个本地分支的分支。 它在/.git/config
中创build了一个如下所示的“merge”条目:
[branch "web"] merge = refs/heads/develop remote = gitserver
每当我切换到“networking”分支,它告诉我,我是超过100开发提交。 那么,我不再致力于发展,这是真的。 我能够简单地删除这个条目,它似乎正在按预期运作。 它正在跟踪远程ref,而不是抱怨在开发分支后面。
正如Vikram所说,这个Stack Overflow线程是Google在search这个问题时最好的结果,所以我想我会分享我的情况和解决scheme。
提示git pull
或git fetch
的答案是正确的。
当git status
看到.git/FETCH_HEAD
和.git/refs/remotes/<repository>/<branch>
(例如.git/refs/remotes/origin/master
)之间的区别时,会生成消息。
后面的文件logging了最后一次获取(仓库/分支)的HEAD。 做git fetch
更新这两个文件到分支的当前HEAD。
当然,如果没有东西要读取(因为本地存储库已经是最新的),那么.git/FETCH_HEAD
不会改变。
我在舞台服务器上有这个问题,我只能拉。 而硬重置帮助我清理HEAD到远程相同。
git reset --hard origin/master
所以现在我又有了:
On branch master Your branch is up-to-date with 'origin/master'.
我经历了这个页面上的每一个解决scheme,幸运的是@ anatolii-pazhyn评论,因为他的解决scheme是有效的。 不幸的是,我没有足够的声望来赞扬他,但我build议先尝试他的解决scheme:
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
祝你好运