2009-10-09 90 views
9

我工作的git倉庫被打破,失去它的軌道中的所有文件,即恢復破碎的Git倉庫

 
$ git log 
fatal: bad default revision 'HEAD' 
 
$ git status 
... told me that all the files are new 

然而.git目錄確實包含我的對象。

 
$ du -sh .git 
34M .git 
 
$ git count-objects 
4151 objects, 32692 kilobytes 
 
$ git --version 
git version 1.6.0.4 

我記得做出了差錯被創建(克隆--mirror)在NFS掛載的服務器備份庫前的最後一件事。然而克隆的備份庫也是以相同的方式打破。

如何恢復我的存儲庫?

+0

存儲庫中是否有'master'分支?另外,你用'git log --all'得到了不同的結果嗎? – 2009-10-09 19:24:51

+0

不,'git branch -a'告訴我什麼都沒有。 – Eyoka 2009-10-09 19:55:04

回答

8

除克隆之外,肯定還有東西,但我知道記住這些東西有多難。

你想要做的第一件事是看看.git/refs,看看裏面有沒有什麼有效的東西(我不太樂觀,因爲你說沒有看到任何分支,但它是值得的一槍)。如果有任何有效的參考文獻,您可以從git-reflog獲得一些信息。我想看看git-fsck。其主要目的是驗證數據庫中對象的連通性和有效性。根據您的回購確實發生了什麼,您可能需要--unreachable--lost-found。希望這些對象是完整的,所以你需要做的是找到一些懸空的提交哈希來檢出並重新創建分支。

+0

謝謝。我已經手動修復了存儲庫。事實證明,分支(在.git/refs /頭文件)失蹤,但對象完好無損。我能夠從.git/logs/HEAD獲得每個分支尖端的提交散列,並使用它們來重新創建分支文件。那時我不知道git-fsck命令。 但我仍然好奇這是怎麼發生的,顯然我沒有做

git branch -d
。我不知道很多git命令,我記得的唯一的命令是
git reset
git remote rm ...
Eyoka 2009-10-09 23:43:33

1

您可以手動檢查,但這需要有關存儲庫格式的一些知識。

不看存儲庫很難說出發生了什麼,但可能有些文件已損壞。

運行git fsck,它會告訴您的存儲庫是否仍然有效。

發佈git fsck運行的結果,這應該會幫助我們來幫助你。

1

嘗試檢查.git /中的每個文件是否都由當前用戶擁有。

我有同樣的問題,當意識到我做了一些提交與root用戶,並創建對象(根據.git /對象)屬於根,觸發錯誤時運行git作爲普通用戶。

該命令解決了這個問題:

sudo chown jb:jb .git/ -R * 
1

我我的GitHub上的應用程序(PC)後墜毀得到這個問題剛纔。當我使用git branch時,我的分支消失了,並且它一直提示我做我的初始提交。我通過在.git/refs/heads/中找到我的分支並將其從mybranch.lock重命名爲mybranch(解除鎖定)來解決此問題。

+0

這個答案對我有幫助。我使用GitHub for Windows,並突然將存儲庫中的每個文件都視爲一個新文件。 git日誌返回「致命:錯誤的默認版本'HEAD'」。 git fsck返回了一堆懸而未決的提交。我只需要重命名文件master.lock來掌握 – 2014-06-04 20:55:14

0

在開發人員在集中式回購倉庫的裸機內部做了$ git init之後,我遇到了此問題。

如果您正在使用沒有工作目錄的存儲庫,請檢查.git文件夾;刪除這個應該糾正這個問題。