今天,假设我遇到了一个git问题。这是我使用git (仅push
和pull
命令)的1年,到目前为止一切都很好。但今天这个命令不起作用并引发错误:
$ git pull origin master
这是错误:
有人知道问题是什么,我该如何解决?
答案 0 :(得分:2)
检查.git\refs\remotes\origin
如果您这样做,请将其删除,然后再次尝试git pull
。
作为替代方案,只需尝试在另一个文件夹中再次克隆您的存储库,只是为了查看错误是否仍然存在。
字符串"
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