只有累積,沒有奇蹟

2019年1月15日 星期二

[Git] error: cannot lock ref 'refs/remotes/origin/xxx': ref xxx is at OO expected XX

情境
今日接獲同事反應,在使用 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 意見:

張貼留言

Copyright © m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com