git拒绝获取当前分支

Oli*_*ier 59 git git-fetch

我设置了一个远程存储库,我可以对它进行新的更改,但我无法从中获取,我总是得到(相当神秘的)错误消息:

fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)

这是什么意思?我该怎么做才能获取?

(请注意,此远程仓库仅用作备份仓库,因此它应该是我本地存储库的精确副本.我真的无法理解为什么我可以推送它但不能从中获取...)

我的配置看起来像:

[remote "origin"]
    url = ssh://blablablah
    fetch = +refs/*:refs/*
    mirror = true
Run Code Online (Sandbox Code Playgroud)

Rob*_*obW 52

如果有人发现这个因为他们特别想要获取当前分支,你可以使用该--update-head-ok标志.来自文档:

-u
--update-head-ok
默认情况下,git fetch拒绝更新与当前分支对应的头部.此标志禁用检查.这纯粹是为了内部使用git pull与git fetch进行通信,除非你实现自己的Porcelain,否则你不应该使用它.

在某些情况下,我们确实希望实施我们自己的瓷器命令,例如自动化和工具.

  • 为什么git不想在这种情况下更新头?他们为什么不要你使用这个标志? (3认同)
  • 我认为限制是为了防止你失去工作,但我确认即使使用`-u`标志,非快进提交也会被拒绝:`![拒绝]主人 - >主人(非快进)` (3认同)
  • 如果你想抛弃你的主人,并把它指向原来的主人:`git fetch -fu origin master` (3认同)

Mic*_*ker 34

你要做的是获取你正在处理的分支.也就是说,你在主分支,并尝试对其进行更新.那是不可能的.更新remotes/*分支然后将其拉入本地分支更为常见.你想要的也许是,

git remote add otherrepo thehost:/the/path.git
Run Code Online (Sandbox Code Playgroud)

这将设置要获取的存储库remotes/otherrepo/*.git fetch otherrepo应该做的伎俩.Alternativeley,您可以手动编辑.git/config和设置fetch遥控器之类的东西refs/heads/*:refs/remotes/otherrepo/*.


Sai*_*Sai 5

如果您在master分支中并且想要获得最新的尝试,这也应该工作

git pull起源大师


ros*_*net 5

要在获取 PR 进行本地测试时处理此问题,只需签出另一个分支,然后获取 PR 即可。

git checkout -b feature-branch # create a branch to fetch changes into.
git checkout master # or main
git fetch origin pull/5/head:add-feature # fetch pull request by ID
git checkout feature-branch
Run Code Online (Sandbox Code Playgroud)