[英]add remote + swap name with origin, gives error: “git fetch origin; git merge” works, != “git pull” has error -why/how?
我已经搜寻了很多东西以了解这一点,并且我感觉它只是在滑过我的手指。 这里有相似但不完全相同的QnA。
问题:
$ 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仓库,freenet / wininstaller-official.git,然后看到wininstaller-staging.git并认为:“那里可能存在一些非实质性的重叠,我应该将“ staging”添加为第一个仓库的远程站点。 是的,现在我们正在用git做饭! 这将非常有效。
然后,我想到了“分阶段进行跟踪可能更好,让我们称该原点为好,让我的本地主跟踪新的原点/原点”。 哇! 我是Uber-elte!
因此,我按上述方式重命名了遥控器,删除了本地主机,签出跟踪新的原点/主机的新主机。
和git fetch; git merge
git fetch; git merge
似乎证明它是正确的!
但是可惜, git pull
错误。 麻烦是我。 毕竟不是那么超级精英:(
TIA
git pull
的错误是抱怨它找不到您告诉它要合并的分支。 我怀疑这是因为你有tagopts = --tags
配置为origin
,并与该选项, git fetch
不取分支头 。 尝试删除该行,然后再次运行git pull
。
解释pull
/ fetch-and-merge
区别:手动运行git fetch
,它没有--tags
选项,因此它确实会提取分支头。 因此,在那之后, origin/master
就可以存在了,并且可以从中合并。
可能还需要补充一点:使用git merge origin/<branch-name>
更为正常,这比git merge origin
更明确。 在这种更不寻常的情况下,Git是解释origin
作为分支refs/remotes/origin/HEAD
-即当前分支(或承诺)的远程仓库origin
上次你从那里获取。 最好使用git merge origin/<branch-name>
以避免混淆。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.