恢复损坏的git存储库

时间:2009-10-09 18:37:12

标签: 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

我记得在它出错之前做的最后一件事是在NFS安装的服务器上创建(clone --mirror)备份存储库。但是,克隆的备份存储库以相同的方式被破坏。

如何恢复我的存储库?

5 个答案:

答案 0 :(得分:8)

除了克隆之外肯定还有其他东西,但我知道记住这些东西是多么困难。

你要做的第一件事是查看.git / refs,看看那里是否有任何有效的东西(我不太乐观,因为你说似乎没有任何分支,但它值得一个射击)。如果存在任何有效的引用,您可以从git-reflog获取一些信息。

接下来,我将开始查看git-fsck。其主要目的是验证数据库中对象的连通性和有效性。根据您的回购交易发生的确切情况,您可能需要--unreachable--lost-found。希望对象是完整的,所以你需要做的就是找到一些悬空的提交哈希来检查并重新创建分支。

答案 1 :(得分:1)

您可以手动检查,但这需要了解存储库格式的一些知识。

如果不查看存储库很难说清楚发生了什么,但可能是某些文件已损坏。

运行git fsck,它将告诉您的存储库是否仍然有效。

发布git fsck run的结果,这应该可以帮助我们。

答案 2 :(得分:1)

尝试检查.git /中的每个文件是否归当前用户所有。

我遇到了同样的问题,当我意识到我与root用户进行了一些提交,并且创建了对象(在.git / objects下),其中属于root,在以常规用户身份运行git时会出现错误。

此命令解决了问题:

sudo chown jb:jb .git/ -R *

答案 3 :(得分:1)

我的GitHub应用程序(PC)崩溃后,我刚才遇到了这个问题。使用git branch时我的分支消失了,它一直让我做我的初始提交。我通过在.git/refs/heads/中找到我的分支并将其从mybranch.lock重命名为mybranch(删除锁定)来解决此问题。

答案 4 :(得分:0)

在开发人员在集中仓库的主人身上做了$ git init后,我遇到了这个问题。

如果您正在使用没有工作目录的存储库,请检查.git文件夹;删除这个应该纠正问题。