如何在 Github for Windows 崩溃后恢复存储库?

3
当我尝试提交代码时,Github for Windows崩溃了,现在使用git(命令行)告诉我每个文件都是新的。我仍然有一个大小为53mb的.get文件夹。在此之前,我进行了大约60到100次提交。
如何恢复我的工作副本而不丢失任何历史记录或更改?
Git状态显示:
在主分支上
首次提交
将要提交的更改: (使用“git rm --cached…”取消暂存)
新文件:.gitattributes 新文件:.gitignore ...(1620个更多的文件)
未提交的更改:(使用“git add…”更新要提交的内容)
(使用“git checkout --…”放弃工作目录中的更改)
修改:Src/Foo/Bar/Index.cshtml
未跟踪的文件:(使用“git add…”将其包含在要提交的内容中)
Posh Git命令提示符如下所示
C:\ Projects \ Foo [master +1623〜0-0 | +0〜1-0]> git log的输出如下所示
C:\ Projects \ Foo [master +1623〜0-0 | +1〜1-0!]> git log 致命:默认修订“HEAD”错误
更新:
我刚刚从Git GUI运行“Verify Database”,并返回以下内容:
悬挂树4b825dc642cb6eb9a060e54bf8d69288fbee4904悬挂提交 30855e0deee8600f10733e6760db54fee2570a38悬挂提交 cd8bc69ad56ca5c4d51d0d5028525698158cf3ec悬挂提交 c934f9823d907cd69c5e08a0159b9de4dfe3da35悬挂提交 f958caca247978db978b70460276b5da7582bb06注意:HEAD指向一个未出现的分支(master)注意:没有默认引用

如果没有更具体的诊断信息,很难确定这里正在询问什么。您可能应该包括一些git状态的输出以及您期望的确切内容/之前存在的内容。同时我会投票关闭。 - pmr
2个回答

2

好的,首先,我复制了我的工作副本,以便始终有一个备用位置。接下来我运行了git fsck命令,得到以下输出结果。

> dangling tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 dangling commit
> 30855e0deee8600f10733e6760db54fee2570a38 dangling commit
> cd8bc69ad56ca5c4d51d0d5028525698158cf3ec dangling commit
> c934f9823d907cd69c5e08a0159b9de4dfe3da35 dangling commit
> f958caca247978db978b70460276b5da7582bb06 notice: HEAD points to an
> unborn branch (master) notice: No default references

从这里开始,我使用了
git checkout <some-hash>

通过对上述悬空提交哈希值的处理。结果,最后一个悬挂提交是我最近的提交,所以git checkout c934f9823d907cd69c5e08a0159b9de4dfe3da35让我回到了崩溃之前的工作副本。
接着,我运行了git checkout -b master命令,重新创建了我的主分支。现在git status显示有一个更改,那就是我想要提交的提交。进行提交后,我又回到了正轨。

@NoufalIbrahim 不,但一开始有点吓人。 - Greg B

1
首先:不要惊慌。备份您的项目,包括您的工作文件夹。嗯...实际上,备份两个吧 :)

我仍然有一个大小为53mb的.git文件夹。

Git是一个相当强大的工具。对对象数据库的分析可以“重建”您的历史记录。
此外,GHfW记录了与存储库的大多数交互。长话短说,GHfW团队有很好的机会帮助您挽救存储库。
正如公告博客文章所述

我们确保阅读Twitter上的每个提及。如果您发现错误,请将其提交至support@github.com。每封电子邮件都由真人阅读。

给他们发送一封邮件。现在就像马上这样。

我该如何像你建议的那样“分析对象数据库”? - Greg B
这是一个独立的问题...而且相当复杂 ;) 有不同类型的对象(提交、树、块和标签)。每个对象都被存储在.git/objects结构中(无论是打包还是松散格式)。树列出了它的“子节点”(块、其他树或提交(子模块))。提交指向一个树和其父提交列表。注释标签可以指向其他三种对象中的任何一种。考虑到这一点,应该能够重建对象之间的关系。.git/refs的内容最终将帮助您识别“书签”对象(头和标签)。 - nulltoken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接