git pull报错集锦

4,745 阅读1分钟

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

image.png

但我们改成使用 git pull origin develop 时,成功了 image.png

我们再次使用 git pull时,却又出现如下错误 image.png

原因分析

项目中 .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 试试 image.png image.png image.png

这回直接 git pull 也成功了,这个 prune 究竟是何方圣神呢?

方法二:删除有问题的 refs

  • 根据错误提示找到 .git 文件夹下 refs 目录中对应的错误 refs 文件并删除
  • 使用 $ git update-ref -d refs/remotes/origin/refs文件