表现
在windows上使用TortoiseGit、或者在Linux上使用Git命令,对一个项目拉取代码时,会提示reference broken错误。以下为TortoiseGit的日志:
git.exe fetch --progress -v "origin" master
Server refused to set environment variables
From github.com:HorseLuke/AlibabaSDK
* branch master -> FETCH_HEAD
error: cannot lock ref 'refs/remotes/origin/master': unable to resolve reference 'refs/remotes/origin/master': reference broken
! [new branch] master -> origin/master (unable to update local ref)
git did not exit cleanly (exit code 1) (797 ms @ 2021-03-05 22:08:33)
原因
项目中的.git目录,其用于保存指向commit对象的指针文件丢失或者损坏。这些文件一般存放在“【项目目录】/.git/refs/remotes/origin”下。
解决方法
1、删除“【项目目录】/.git/refs/remotes/origin”下的所有文件,删除前注意备份。
Linux下可运行如下命令进行删除(没有用 -f,是为了仔细确认):
rm 【项目目录】/.git/refs/remotes/origin/*.*
2、重新运行一次拉取命令。这其中:
2.1、在TortoiseGit中,就是右键菜单选择Git Sync后,再点Pull。
2.2、在Linux下,则是直接运行如下命令:
git fetch --all