git fetch origin拒绝了

时间:2013-04-12 10:02:18

标签: git

突然间,我无法再从遥控器中取出......

$git fetch origin
! [rejected]        master     -> origin/master  (non-fast-forward)

我不知道该寻找什么或发生了什么,因为它一直在工作。 关于配置没什么可说的:

[remote "origin"]
    url = http://xx.xxx.xx/project.git
    fetch = refs/tags/*:refs/tags/*
    fetch = refs/heads/*:refs/remotes/origin/*
    push = refs/tags/*:refs/tags/*
    push = refs/heads/master:refs/heads/master

其他同事可能在遥控器上推了一些东西,但是我们这么做很长时间没有问题......

1 个答案:

答案 0 :(得分:3)

  1. 正如您自己想的那样,您的fetch refspec是非标准的:缺少“+”前缀。它是有效,它不是Git默认设置的,因为默认情况下它会在取出时覆盖远程分支的内容。

    Git为命名的遥控器添加的默认refspec如下所示:

    $ git config --get remote.origin.fetch
    +refs/heads/*:refs/remotes/origin/*
    

    因此,您应该只需撤消手动完成的操作并坚持使用默认值,直到您真正了解refspecs和提取工作的方式(至少阅读git-fetch manual page)。

  2. git merge origin master表示«将分支“origin”和“master”合并到本地分支中»(进行所谓的“章鱼合并”)。

    您要么git pull origin master(这意味着«从“来源”获取分支“master”,然后将其合并到当前已检出的分支»)或git fetch origin后跟git merge origin/master ,其中“origin / master”指的是git fetch origin执行其工作后所谓的创建/更新的远程分支(受上述第一点的影响)。

  3. 最重要的是,您似乎尝试通过编辑配置文件而不是仅运行git remote add <name> <git_url>来创建远程。除非你真正了解内部运作,否则不要这样做。

    Reading up on remote branches也很重要。