只有回购的'混帐状态'说分支在原产地/主人之前。 为什么?

所以情况如下:

$ git状态
#在分支主机上
#您的分支在[x]提交之前领先于“origin / master”。

关于这一点,关于这个问题有几个问题,但没有一个专门针对我的情况。 其中一个问题的答案最接近,但没有详细说明。

我只会逐字引用它:

如果你在做一个“git pull remote branch”之后得到这个消息,可以尝试使用“git fetch”进行跟踪。

取指似乎更新远程分支的本地表示,当你执行“git pull remote branch”时不一定发生。

该提示确实有效。 但“不一定发生?” 为什么不? 我需要了解这一点。 拉不干什么?

我不想接管这个问题,所以这是我的详细情况:

涉及三台电脑。 我开发的Mac,我的家庭服务器,git repo(即origin / master)所在的位置,以及从该服务器拉出的Webfaction帐户。

我只在Mac上提交和git push origin master 。 作为正常工作流程的一部分,唯一可以在Webfaction上运行的命令是git pull origin master (作为Fabric部署脚本的一部分)。 我不在那里修改代码。 我是一个单独的开发人员,其他人也一样。

每隔一段时间我都会登录Webfaction并检查一些事情,包括git status 。 不可避免地,我总是得到“你的分支在前面......”的信息。 运行git fetch会使消息消失。

我正要将git fetch添加到Fabric脚本来完成这个问题,但我想知道为什么需要这样做,特别是在原始/主控制器的唯一克隆中。 虽然我每天都使用基本功能,但我对Git并不十分熟悉,所以我们将会赞赏新手友好的解释。

根据要求更新相关位,从config

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@[server_address]:[path/to/repo.git]
[branch "master"]
    remote = origin
    merge = refs/heads/master

好吧,从一开始,你就正确地做了一切。 我认为你之前添加的评论是一个很好的解释:

用最简单的话来说,“git pull”做了一个“git fetch”,然后是“git merge”

我就是这么想的。 所以你不应该在直接的git pull之后调用git fetch - 但是,我几乎可以保证你,除了master分支之外,这对任何事情都是完美的。

在其中一个链接的帖子中,它表示删除以下行:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/* <--- Remove this

它应该解决这个问题 - 但是,我无法解释为什么这会起作用。 研究起来非常困难,但我认为当你调用fetch ,你的git配置实际上指定了要抓取的东西。 当你运行pull ,我不确定它认为master是同步的。

我可以向你保证,如果你是从另一个非主分支机构完成的,你不会看到这个问题。 希望其中一位git大师能详细解释config中的fetch行。

此外,我会建议运行下面的命令来设置远程存储库的HEAD,以确保它与本地同步: git push -u origin master


这是另一个有趣的问题:

很难理解git-fetch


好吧,我在我的一个工作流程中测试了这一点,并发现以下内容。

当你在你的远程服务器上执行git pull origin master时,在.git/目录中有一个文件引用你的HEAD所在的位置。 两个文件需要注意:

ORIG_HEAD

FETCH_HEAD

你会注意到你的FETCH_HEAD是正确的,但是ORIG_HEAD显示了旧的提交,因此你得到Ahead by x的原因。 当你运行git fetch ,你实际上会纠正ORIG_HEAD的引用,一切都恢复正常。 我正在研究如何更改配置中的fetch行来解决此问题。


如果你运行的是git pull origin而不是git pull origin master ,那么Your branch is ahead of 'origin/master' by ... commits.就不会出现Your branch is ahead of 'origin/master' by ... commits.的问题Your branch is ahead of 'origin/master' by ... commits. 信息。


看到这个问题:'git pull'和'git fetch'有什么区别?

AFAIK git pull会查看原始分支并将更改拉下来。 但分支的本地索引不是最新的。 git fetch将更新分支的索引,以便理解应该在那里的内容。 (基本上你在链接到的答案中提到了什么)

我总是在git pull之前做一个git fetch。 真的,我会在任何时候用远程分支做任何事情。

关于上面的问题还有关于git fetch,pull和merge的非常好的描述。 http://longair.net/blog/2009/04/16/git-fetch-and-merge/

链接地址: http://www.djcxy.com/p/3957.html

上一篇: only repo's 'git status' saying the branch is ahead of origin/master. Why?

下一篇: What is the difference between these `git fetch` syntaxes?