我在 Windows 7 上使用 gitExtensions 開啟 Visual Studio 專案的 Git 儲存庫。突然間就空了。存儲庫存在,但我的所有提交都消失了。
我正在使用圖形介面,我相信這是自從他們更新以來我第一次打開它。
我不確定如何取回我的承諾。
當我打字時
git log
我收到
致命:錯誤的預設修訂版“HEAD”
更新
看完之後https://stackoverflow.com/questions/1545407/recovering-broken-git-repository我試過
git fsck
它返回:
錯誤:無效的 HEAD
致命:鬆散物件 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31 (儲存在 .git/obj ects/36/b7d9e1ca496bcb864c0b9c86711fc
承諾回報:
錯誤:無法解析引用 HEAD:沒有此類檔案或目錄
致命:無法鎖定 HEAD 引用
並記錄主分支返回
$ git log master 警告:忽略損壞的引用 refs/heads/master。警告:忽略損壞的參考 refs/heads/master。致命:不明確的參數「master」:未知修訂版或路徑不在工作樹中。使用“--”分隔路徑和修訂版本
我會繼續貼上可能相關的內容
$ git reflog master
警告:忽略損壞的引用 refs/heads/master。
警告:忽略損壞的參考 refs/heads/master。
致命:不明確的參數「master」:未知修訂版或路徑不在工作樹中。
使用“--”分隔路徑和修訂版本
更多可能有用的信息:每次我刪除損壞的檔案時,另一個檔案就會取代它。我開始認為這與主分支指向錯誤的東西或其他東西有關。因為我假設頭部指向主人。
一天後:
所以我讓我的夥伴了解了這一點,他能夠查看日誌,他說日誌中的雜湊值與資料夾中的物件不符。他嘗試將主分支重置為日誌或類似的東西,我有點迷失了。希望有幫助
答案1
存儲庫存在,但我的所有提交都消失了。
你到底什麼意思?工作樹還在嗎?確實.git/
存在?裡面有文件嗎?
您發布的消息表明該文件.git/HEAD
不存在。它定義了工作樹的預期狀態(您已簽出的狀態)。如果該檔案消失了,git 就不知道你在哪裡。
您可以嘗試自己建立文件,內容如下:
ref: refs/heads/master
如果您位於不同的分支,只需將“master”替換為分支名稱即可。如果你不在分支上,情況會更複雜。
.git/logs/HEAD
記錄 HEAD 過去的狀態,後面的行在底部。此範例行顯示了結帳:
25f2a6099fb5f9f2192a510c42f704f9fc4bcecb 65abb1a3dc102e2498860f01fb179cda4c51decb Rainer Blome <[email protected]> 1346938344 +0200 checkout: moving from master to MySuperBranch
前面的 SHA1 指的是提交。例如,您應該能夠在分支日誌中找到這些內容.git/logs/refs/heads/master
。
您提供的 git reflog 輸出看起來refs/heads/master
也遺失了。它的唯一內容應該是最新提交的 SHA1(以及換行符)。您可以在分支日誌的末尾找到最新的 SHA1,例如.git/logs/refs/heads/master
。
答案2
如果 .git/HEAD 存在且其內容是,ref: refs/heads/master
則檢查檔案 refs/heads/master 它必須包含最後一次提交的 sha1。
如果該檔案已損壞且充滿 NULL 字元 編輯該檔案並放置最新提交的 sha1.git/logs/HEAD
或上次提交之前的 sha1。
然後做git reset --hard 'sha1 of the commit that you selected'
答案3
聽起來您的儲存庫已損壞。最簡單的方法是從備份中還原儲存庫或從原始來源重新複製儲存庫(假設儲存庫中沒有大量工作)。
如果重新整理/克隆不是一個選項,我建議閱讀專業版 Git(免費線上書籍或紙本版)。整本書內容非常豐富,但特別要看看最後一章,以了解 Git 的內部運作原理。一旦您了解了 Git 的工作原理,請查看 Linus 的有關恢復損壞物件的說明。
答案4
在網上沖浪了一段時間後,我終於找到了這個並且它有效。
git fetch origin
git reset --hard origin/master