git拒绝获取当前分支
我设置了一个远程存储库,可以将新的更改推送到该存储库,但是我无法从中获取,我总是收到(而不是神秘的)错误消息:
fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository
fatal: The remote end hung up unexpectedly
这是什么意思? 我应该怎么做才能启用提取功能?
(请注意,此远程存储库仅用作备份存储库,因此它几乎应该是我的本地存储库的精确副本。我真的不明白为什么我可以推送到该存储库但不能从中获取...)
我的配置看起来像:
[remote "origin"]
url = ssh://blablablah
fetch = +refs/*:refs/*
mirror = true
如果有人因为特别想获取当前分支而发现此消息,则可以使用--update-head-ok
标志。 从文档:
-u
--update-head-ok
默认情况下,git fetch拒绝更新与当前分支相对应的head。 该标志禁用检查。 这纯粹是供git pull内部使用,以便与git fetch进行通信,除非您实现自己的Porcelain,否则不应该使用它。
在某些情况下,我们确实希望实现自己的瓷器命令,例如自动化和工具。
您想要做的就是获取您正在使用的分支。 也就是说,您在master分支上,然后尝试对其进行更新。 那不可能 更新remotes/otherrepo/*
分支,然后将其拉入本地分支更为常见。 您想要的可能是
git remote add otherrepo thehost:/the/path.git
这将设置存储库以提取到remotes/otherrepo/*
。git fetch otherrepo
应该可以解决问题。 Alternativeley,您可以手动编辑.git/config
并将fetch
的遥控器设置为refs/heads/*:refs/remotes/otherrepo/*
。
如果您在master分支中并且想要获得最新的尝试,这也应该工作
git pull起源大师
当我不经意地克隆存储库而不是获取它时,就遇到了这个问题,因此两个存储库都是主存储库。 如果您没有对远程存储库进行任何工作,则可以使用以下基本git命令修复问题:(1)删除远程存储库,(2)将本地存储库复制到远程存储库所在的位置,(3)删除远程存储库 本地存储库,然后(4)使用
git init; git fetch $REMOTE_GIT_REPOSITORY_URL
然后git pull
和git push
将做正确的事情。 按照Michael更有效,更原则的回答,避免使用git remote
的好处是,您无需考虑跟踪分支的语义。
我也有同样的问题。 首先,我尝试使用此
git fetch [remote_name] [branch_name]
我有你提到的同样的问题。 之后,我尝试了这个简单的命令。
git pull [remote_name] [branch_name]
注意将获取并合并更改。 如果使用终端,则文件打开,要求提交消息。 通过此消息,您将推送最新的提交。 尝试使用此命令,最后您将能够推送请求。
git push [remote_name] [branch_name_local]
您实际上是在命令行中键入Git命令,还是从自己的代码运行Git可执行文件?
如果您是通过代码运行的,那么您确定Git试图获取正确的本地目录吗?
有两种方法可以做到这一点:
在执行Git之前,使用编程语言提供的选项设置正确的工作目录。
(C#示例,因为这就是我正在使用的)始终将
-C parameter
参数传递给Git,以使用本地存储库指定目录。
我有一个项目,正在从C#代码中调用Git可执行文件,并且当我不小心忘记设置-C parameter
时,也收到了与该问题相同的错误消息。
致命的:拒绝获取非裸存储库的当前分支引用/ heads / BRANCHNAME
我在本地创建了一个分支BRANCHNAME,然后执行了命令“ git fetch up pull / ID / head:BRANCHNAME”并致命:拒绝获取非裸存储库的当前分支refs / heads / BRANCHNAME
然后我删除了该分支,并再次调用相同的cmd,效果很好。
其实我正在检查拉请求分支。