为了理解这一点,我到处寻找,我感觉它只是从我的手指间滑落。这里有相似但不完全相同的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拉出错误,而git fetch/merge产生预期的输出?
背景:我克隆了一个git repo,freenet/wininstaller-Offical.git,然后看了wininstaller-staging.git,我想“那里可能有一些不是无关紧要的重叠,我应该在第一个repo中添加'staging‘作为遥控器”。是啊,现在我们要用git做饭了!这将是非常有效的。
然后我想“阶段可能更好的跟踪,让我们称之为起源,并让我的本地主跟踪新的起源/主控”。哇!我是Uber-elte!
因此,我如上所述重命名远程,删除本地master,签出跟踪新源/ master的新master。
git fetch; git merge似乎证明了它是正确的!
但是,遗憾的是,git pull出错了。不幸的是我。毕竟不是超级精英:(
提亚
发布于 2011-09-27 03:38:22
来自git pull的错误是抱怨它找不到您告诉它合并的分支。我怀疑这是因为您已经为origin配置了tagopts = --tags,并使用该选项,即git fetch doesn't fetch branch heads。尝试删除该行,然后再次运行git pull。
为了解释pull / fetch-and-merge的区别:当您手动运行git fetch时,它不会获得--tags选项,所以它会获取分支头。因此,在这一点之后,origin/master将存在,并且可以从中合并。
另一个值得注意的地方是:使用比git merge origin更显式的git merge origin/<branch-name>更正常。在更不寻常的情况下,git将origin解释为分支refs/remotes/origin/HEAD -即您上次从远程存储库origin中获取的当前分支(或提交)。为了避免混淆,最好还是坚持使用git merge origin/<branch-name>。
https://stackoverflow.com/questions/7558791
复制相似问题