只有累積,沒有奇蹟

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 移除掉即可
  1. git push origin --delete {the_remote_branch}
方法 2 : 刪除 refs 錯誤物件
  1. 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问题的解决

Related Posts:

  • [Git] Git Client 版本管理工具 - Fork前言 相信開發者都聽過或正在 Git 進行版本控管,Git 是一個分散式版本控管系統,在 Windows OS 中支援 Git 的免費工具比較常見的有 TortoiseGit、SourceTree 或是 GitKraken 幾種,最近主管分享另外一套強大的且免費的 Git 版控工具 Fork,在官網上的介紹也十分簡潔有力,a fast and friendly git client for Mac and Windo… Read More
  • [Git] Username and Email must be set before commit發生情境 最近在新筆電安裝開發常用的軟體,安裝完Tortoise GIT版小烏龜之後無法 commit code ,錯誤訊息如下 :      User name and email must be set before commit. Do you want to set these now ?     這訊息與登入憑證 (login credentials) 無關,在 … Read More
  • [VS2017] 如何用 Visual Studio 2017 專案設定 .gitignore 前言 一般在開發的時候,會有一些檔案是不需要 commit 到 Git 版控工具裡面,舉例來說當 VS build 完專案會產生 dll 存放在在 bin 目錄底下,或是 packages 資料夾 ( Nuget 下載的套件 ),甚至一些機密的資料或是 config 檔案,這些內容都不需要 Commit 到 git 中,以上需求都可以透過 .gitignore 定義要忽略的文件或檔案,這篇文章簡單紀錄在Vi… Read More
  • [CheatSheets] Git commands 前言  Git 指令小抄表 source Git Commands and Best Practices Cheat Sheet Git commands … Read More
  • [Git] 如何更新 GitHub Fork 的 repository 前言 GitHub 是全球最大的 Git Server,在 GitHub 上面有很多大神貢獻的 opensource 開源專案內容,看到覺得不錯有興趣的 repository 可以 fork 下來研究,repository 在 fork 下來之後會停留在當下不會自動更新,一段時間之後可能就會與原始 repository 的越差越多,自己在過去遇到這問題時候都是直接砍掉 repo 在重新 fork (砍掉重練概念),但其實在 GitHub 官方文件… Read More

0 意見:

張貼留言

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

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com