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

zen*_*aan 1 git

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

问题:

$ git pull
Your configuration specifies to merge with the ref 'master'
from the remote, but no such ref was fetched.
Run Code Online (Sandbox Code Playgroud)

虽然git fetch没有给出任何东西,其次是git merge originAlready 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
Run Code Online (Sandbox Code Playgroud)

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

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

然后我想"分段可能更好跟踪,让我们称之为原点,让我的本地主人跟踪新的原点/主人".哇!Uber-elte是我!

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

而且git fetch; git merge似乎证明了它的工作原理吧!

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

TIA

Mar*_*air 5

错误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>以避免混淆可能更好.