3

突然,我无法再从远程获取...

$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

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

4

1 回答 1

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

    Git 为命名远程添加的默认 refspec 如下所示:

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

    因此,您可能应该只撤消您手动完成的操作并坚持使用默认值,直到您真正了解 refspecs 和 fetching 的工作原理(至少通过阅读git-fetch手册页)。

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

    您要么想要git pull origin master(这意味着«从“origin”获取分支“master”,然后将其合并到当前签出的分支中»)或git fetch origin后跟git merge origin/master,其中“origin/master”指的是远程分支应该创建/更新为工作的结果git fetch origin(以上述第一点为准)。

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

阅读远程分支也是必不可少的。

于 2013-04-12T11:18:45.210 回答