我已经高低探索了解这一点,我觉得它只是滑过我的手指。这里有类似但不完全相同的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
答案 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 origin
比origin
更明确。在那个更不寻常的情况下,git将refs/remotes/origin/HEAD
解释为分支origin
- 即上次从那里获取时远程存储库git merge origin/<branch-name>
中的当前分支(或提交)。最好坚持{{1}}以避免混淆。