我不知道它是怎么发生的,但我有一个数据丢失,只剩下一个只包含.git
目录的objects
目录。
我已按照Recovering Git repository from objects only:
中的步骤操作git init
objects
目录复制到新的.git/objects
目录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'
。
我应该怎么做以恢复我的数据?
编辑:
klaustopher的建议:
/refs/heads
下添加了一个名为master
的文件,其中包含一个悬空提交。fatal: unable to read tree 3c864da48b16ad0dc5f8ae585380270a708a1e56
答案 0 :(得分:1)
嗯,你得到了对象,但是git不知道哪个是它应该解释为master的提交。 git fsck
的输出中有三个建议。您可以尝试以下方法:
.git/refs/heads
目录并创建名为master
git checkout master
如果那不是您要查找的提交,请在master
- 文件中添加另一个sha1哈希
-
编辑:如果这些不是您在评论中描述的真实提交,那么您应该浏览对象。使用git show 2452845a7b526db3dfbf88c1c2ca05967ef9653a
,您可以看到文件的内容。如果是提交,它将以单词commit
开头,并且还包含日期,提交消息等。您可以编写一个小shell脚本来遍历所有对象。当你找到你的提交时,把它的sha1放在refs / heads / master文件中并执行我上面描述的