只有回购的'混帐状态'说分支在原产地/主人之前。 为什么?
所以情况如下:
$ 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?