为什么git pull失败了?

时间:2017-04-29 05:10:41

标签: git bitbucket pull

今天,假设我遇到了一个git问题。这是我使用git (仅pushpull命令)的1年,到目前为止一切都很好。但今天这个命令不起作用并引发错误:

$ git pull origin master

这是错误:

enter image description here

有人知道问题是什么,我该如何解决?

2 个答案:

答案 0 :(得分:2)

检查.git\refs\remotes\origin

中是否有主文件

如果您这样做,请将其删除,然后再次尝试git pull

作为替代方案,只需尝试在另一个文件夹中再次克隆您的存储库,只是为了查看错误是否仍然存在。

正如torek提及in the comments

  

字符串" reference broken"表示指定的引用名称存在,它只附加了无效的SHA-1哈希ID   这不应该发生(参考名称本身应该已经被破坏了),所以不清楚这是怎么发生的。

您可以在refs/files-backend.c#lock_raw_ref()

中看到错误消息
if (errno == EINVAL && (*type & REF_ISBROKEN)) {
            strbuf_addf(err, "unable to resolve reference '%s': "
"reference broken", refname);

该检查是在Git 2.10 (April 2016)中提到的:

  

这使用了一个类似于的新函数lock_raw_ref()   read_raw_ref(),但在阅读之前获取对引用的锁定。

     

此更改仍有两个问题:

     
      
  • 有冗余的read_ref_full()参考查找。
  •   
  • 仍然可能为符号引用获取不正确的reflog   如果另一个进程有并发更新,那么old_oid   在指向ref的锁定之前确定symref的值   保持。
  •   

答案 1 :(得分:2)

在StackOverflow上检查这个问题,解决了同样的错误:

Git and nasty "error: cannot lock existing info/refs fatal"

引用接受的答案:

  

当我的git remote(bitbucket.org)更改了他们的IP地址时,发生了这种情况。快速解决方法是删除并重新添加遥控器   一切都按预期工作。如果您不熟悉如何操作   删除并重新添加一个远程git,步骤如下:复制SSH   现有遥控器的git URL。您可以将其打印到终端   使用此命令:

git remote -v
     

会打印出类似这样的内容:

origin git@server-address.org:account-name/repo-name.git (fetch)
origin git@server-address.org:account-name/repo-name.git (push)
     

从本地git repo中删除遥控器:

git remote rm origin
     

将遥控器添加回本地仓库:

git remote add origin git@server-address.org:account-name/repo-name.git