JK *_*iho 10 git branch git-pull git-push git-fetch
所以情况如下:
$ git status #On
branch master
#你的分支在[x]提交之前位于'origin/master'之前.
#
关于SO的问题已有几个问题,但似乎没有一个问题专门针对我所拥有的场景类型.其中一个问题的答案最接近,但没有详细说明.
我会直接引用它:
如果在执行"git pull remote branch"后收到此消息,请尝试使用"git fetch"进行跟进.
Fetch似乎更新了远程分支的本地表示,当你执行"git pull remote branch"时不一定会发生这种情况.
这个提示确实有效.但"不一定会发生吗?" 为什么不?我需要了解这一点.什么拉不做?
我不想接管这个问题,所以这是我的详细情景:
涉及三台电脑.我开发的Mac,git repo(即origin/master)所在的家庭服务器以及从该服务器获取的Webfaction帐户.
我提交并且git push origin master仅在Mac上提交.作为正常工作流程的一部分,在Webfaction上运行的唯一命令是git pull origin master(作为Fabric部署脚本的一部分).我不修改那里的代码.我是一个独立的开发者,所以其他任何人都没有.
我偶尔会登录Webfaction并检查一些事情,包括a 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
Run Code Online (Sandbox Code Playgroud)
好的,从一开始,你就是在做正确的事.我认为您之前添加的评论是一个很好的解释:
用最简单的术语来说,"git pull"执行"git fetch"后跟"git merge"
这就是我的想法.所以,你不应该叫git fetch后直线上升git pull-但是,我几乎可以保证你,这个工程上的任何东西,除了完全正常的master分支.
在其中一个链接的帖子中,它说要删除以下行:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/* <--- Remove this
Run Code Online (Sandbox Code Playgroud)
它应该解决这个问题 - 但是,我无法解释为什么这样做.研究起来非常困难,但我认为,当你打电话时fetch,你的git配置实际上指明了要抓取的内容.当你跑步时pull,我不确定它是否认为master已经同步.
我可以向您保证,如果您从另一个非主分支执行此操作,您将不会看到此问题.希望其中一位git大师可以详细解释fetch配置中的行.
此外,我建议运行以下命令,它将远程存储库的HEAD设置为确保它与本地存储库同步: git push -u origin master
这是另一个有趣的问题:
好的,所以我在我的一个工作流程中对此进行了测试,发现了以下内容.
在git pull origin master远程服务器上执行a 时,.git/目录中有一个文件引用了HEAD所在的位置.需要注意的两个文件:
ORIG_HEAD
FETCH_HEAD
你会注意到你的FETCH_HEAD是正确的,但是ORIG_HEAD显示旧的提交,因此你得到的原因Ahead by x.当你运行时git fetch,你将实际纠正引用ORIG_HEAD,一切都恢复正常.我正在研究如何更改fetch配置中的行来修复此行为.
如果您运行git pull origin而不是a git pull origin master,则不会出现Your branch is ahead of 'origin/master' by ... commits.消息问题.
注意:这个问题最近从 Git 链接到:无法获得远程和本地/服务器相同。请注意,原始问题的日期是 2011 年 9 月;当时 Git 的最新版本是 1.7.10。Git 现在的版本是 2.26.2。
\n\n在 Git 1.8.4 之前的 Git 版本中,运行git pull origin master 会抑制更新本地名称origin/master。(跑步也是如此git fetch origin master。)
运行git fetch(不带其他参数)会导致 1.8.4\xe2\x80\x94 之前和之后的所有版本的 Git\xe2\x80\x94 更新所有远程跟踪名称,包括origin/master. 这就是这个谜团背后的真正解释。
| 归档时间: |
|
| 查看次数: |
7304 次 |
| 最近记录: |