【问题标题】:Recovering git repository from the objects directory从对象目录中恢复 git 存储库
【发布时间】:2011-09-24 20:14:16
【问题描述】:

我不知道它是怎么发生的,但我丢失了数据,只剩下一个 .git 目录,其中只包含一个 objects 目录。

我已经按照Recovering Git repository from objects only:

的步骤
  1. 创建了一个新目录并运行git init
  2. 将我必须的objects 目录复制到新的.git/objects 目录中
  3. 运行git fsck 命令。

上述步骤的输出产生了以下消息:

notice: HEAD points to an unborn branch (master)
notice: No default references
dangling commit 0b2c7d52b6a7e6d4e2858e9ebf207c315407c87c
dangling commit 8dceafea1634c923069f6d4b925839c28d92c4e5
dangling commit dd7bdd04c557a018c15fd0948075121f181decd1

当我在这个阶段尝试运行git log 时,我得到fatal: bad default revision 'HEAD'

我应该怎么做才能恢复我的数据???


编辑:

克劳斯托弗的建议:

  1. 我在 /refs/heads 下添加了一个名为 master 的文件,其中包含一个悬空提交。
  2. 我得到的回复是fatal: unable to read tree 3c864da48b16ad0dc5f8ae585380270a708a1e56
  3. 我查了一下,“objects”下没有3c目录...

【问题讨论】:

    标签: git


    【解决方案1】:

    好吧,你得到了对象,但 git 不知道它应该将哪个提交解释为 master。 git fsck 的输出中有三个建议。您可以尝试以下方法:

    • 创建.git/refs/heads 目录并创建一个名为master 的文件
    • 将其中一个提交的 SHA1 哈希放入此文件中
    • 运行git checkout master

    如果那不是您要查找的提交,请在 master-file 中放入另一个 sha1 哈希

    --

    编辑:如果这些不是您在评论中描述的真正提交,那么您可能应该检查您的对象。使用git show 2452845a7b526db3dfbf88c1c2ca05967ef9653a,您可以查看文件的内容。如果它是一个提交,它将以单词commit 开头,并且还包含日期、提交消息等。您也许可以编写一个小 shell 脚本来遍历所有对象。当你找到你的提交时,将它的 sha1 放在 refs/heads/master 文件中并按照我上面描述的操作

    【讨论】:

    • 我正在尝试这样做,但现在有一些完全奇怪的东西。我创建了一个全新的目录并运行“git init”。然后当我运行“git log”时,我收到错误“fatal: bad default revision 'HEAD'”...这是一个完全不同的目录,看起来 git 现在坏了
    • 当我进入新目录和 /refs/heads/ 由于某种原因没有主文件时:/
    • 是的,没有主人,因为没有真正的提交。创建目录并创建文件
    • 我在帖子中添加了一些关于您的建议的更多信息。你有什么意见吗?
    • 我添加了一种查找提交的方法.. 不是一个很好的方法,但可能是一个
    猜你喜欢
    • 2011-08-11
    • 2012-03-29
    • 2020-05-28
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 2019-07-21
    • 2013-08-24
    • 1970-01-01
    相关资源
    最近更新 更多