今日接獲同事反應,在使用 git pull 時發生異常錯誤訊息為 error: cannot lock ref 'refs/remotes/origin/xxx': ref xxx is at OOO expected XXX,如下圖所示
問題原因
我們透過 git 官網可以得知遠端分支 remote branch ,遠端 Branch 與 本地 Branch 的指標都是指到同一個位置 commitID (sha1值),指標都存放在專案底下 .git\refs\remotes\origin 資料夾中,開啟資料夾底下的檔案內容都是對應到相對的 commitID,當你在透過工具或是 command line 進行 git pull 動作的時候,遠端的分支與本地分支對應到的 commitID 不同,舉例來說,上方圖示中遠端的分支與本地分支都應該指到 f42c5 這資料夾,但在 pull 時發現兩個指定到的資料夾不同,因此後半段錯誤訊息為 ref/remote is OOOO but expected XXXX,git 預設是不區分大小寫
解決方案
方法 1 : 刪除遠端 branch
透過確認 remote branch 後發現版控上有兩個命名相同的分支,只有第一個英文字母大小寫不同而已 ( git 預設是不區分大小寫),在確認不需要的 branch 時透過以下指令直接將 branch 移除掉即可
git push origin --delete {the_remote_branch}方法 2 : 刪除 refs 錯誤物件
git update-ref -d refs/remotes/origin/git/OOOO兩者解決方式不太相同,個人思路如下
第一種方法是直接刪除不需要的遠端分支,刪除後大家重新 pull 就可以 : 做一次
第二種方法是需要每個人都刪除本機端的 refs 檔案 : 團隊的每個人都要做
但建議如果選擇第一種方案執行前先進行備份的動作,才不會誤刪造成毀滅性的災難(大誤
參考
Git-分支-遠端分支
git pull时遇到error: cannot lock ref ‘xxx’: ref xxx is at (一个commitID) but expected的解决办法
cannot lock ref问题的解决
0 意見:
張貼留言