1. error: some local refs could not be updated
报错显示
当我们使用 git pull
时,出现如下错误
error: cannot lock ref 'refs/remotes/origin/某分支': 'refs/remotes/origin/某分支' exists; cannot create 'refs/remotes/origin/某分支'
error: some local refs could not be updated
但我们改成使用 git pull origin develop
时,成功了
我们再次使用 git pull
时,却又出现如下错误
原因分析
项目中 .git 文件夹下 refs 目录中追踪的其它同事分支,在使用 git pull
时发现与远程仓库中对应的分支refs不同,导致拉取失败,为什么不一样了?
- 在本地有这个分支但在远程库中这个分支已经不存在了
- 有同事强推了这个分支,导致远程仓库中该分支被覆盖,而我们本地仓库 refs 则会与远程仓库的分支不一致,导致失败
- git 分支不区分大小写,有同事删除了远程仓库中自己的分支,又重新创建了一个同名的分支,也会导致拉取失败
解决办法
方法一:其实上面 git pull
报错时已经提示了解决办法
error: some local refs could not be updated; try running 'git remote prune origin' to remove any old, conflicting branches
于是,我们执行 git remote prune origin
试试
这回直接 git pull
也成功了,这个 prune 究竟是何方圣神呢?
方法二:删除有问题的 refs
- 根据错误提示找到 .git 文件夹下 refs 目录中对应的错误 refs 文件并删除
- 使用
$ git update-ref -d refs/remotes/origin/refs文件