添加远程+交换名称与原点,给出错误:“git fetch origin; git merge”工作,!=“git pull”有错误 - 为什么/如何?

时间:2011-09-26 17:24:24

标签: git

我已经高低探索了解这一点,我觉得它只是滑过我的手指。这里有类似但不完全相同的QnAs。

问题:

$ git pull
Your configuration specifies to merge with the ref 'master'
from the remote, but no such ref was fetched.

git fetch不提供任何内容,后跟git merge origin,后面跟着Already up-to-date.,这就是我期望git pull“正常”工作的内容。

$ cat .git/config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "official"]
    url = git://github.com/freenet/wininstaller-official.git
    fetch = +refs/heads/*:refs/remotes/official/*
[remote "origin"]
    url = git://github.com/freenet/wininstaller-staging.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    tagopt = --tags
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "t"]
    remote = origin
    merge = refs/heads/master

$ cat .git/refs/remotes/origin/master
1a30b106723624321366f40a078c9ca4c28394ec

$ cat .git/refs/heads/master
1a30b106723624321366f40a078c9ca4c28394ec

为什么git pull会出错,而git fetch / merge会产生预期的输出?

背景: 我克隆了一个git repo,freenet / wininstaller-official.git,然后看到wininstaller-staging.git,并认为“那里可能有一些非实质性的重叠,我应该将'staging'添加为第一个repo的遥控器”。是的,现在我们正在用git做饭!这将非常有效。

然后我想“跟踪可能更好跟踪,让我们称之为原点,并让我的本地主人跟踪新的原点/主人”。哇! Uber-elte am I!

所以我如上所述重命名遥控器,删除本地主人,结帐新主人跟踪新原点/主人。

git fetch; git merge似乎证明它运作正常!

但是,唉,git pull出错了。祸了我。毕竟不是那么超级精英:(

TIA

1 个答案:

答案 0 :(得分:5)

来自git pull的错误是抱怨它无法找到您告诉它要合并的分支。我怀疑这是因为您为tagopts = --tags配置了origin,并且使用该选项git fetch doesn't fetch branch heads。尝试删除该行,然后再次运行git pull

解释pull / fetch-and-merge差异:当您手动运行git fetch时,它不会获得--tags选项,因此它会获取分支头。因此,在此之后,origin/master存在并且可以合并。


另外一个注释可能值得补充:使用git merge origin/<branch-name>更为正常,git merge originorigin更明确。在那个更不寻常的情况下,git将refs/remotes/origin/HEAD解释为分支origin - 即上次从那里获取时远程存储库git merge origin/<branch-name>中的当前分支(或提交)。最好坚持{{1}}以避免混淆。