我在 Windows 7 上使用 gitExtensions 打开了 Visual Studio 项目的 Git 存储库。它突然变空了。存储库存在,但我的所有提交都消失了。
我正在使用图形界面,我相信这是他们更新以来我第一次打开它。
我不确定如何才能恢复我的承诺。
当我输入
git log
我收到
致命:错误的默认修订版本‘HEAD’
更新
看过之后https://stackoverflow.com/questions/1545407/recovering-broken-git-repository我试过
git fsck
它返回:
错误:无效的 HEAD
致命:松散对象 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31(存储在 .git/obj ects/36/b7d9e1ca496bcb864c0b9c8671fcec97fbda31 中)已损坏
承诺回报:
错误:无法解析引用 HEAD:没有此文件或目录
致命:无法锁定 HEAD 引用
并记录主分支返回
$ git log master 警告:忽略损坏的引用 refs/heads/master。警告:忽略损坏的引用 refs/heads/master。致命:参数“master”不明确:未知修订或路径不在工作树中。使用“--”将路径与修订分开
我只是继续粘贴可能相关的内容
$ git reflog master
警告:忽略损坏的引用 refs/heads/master。
警告:忽略损坏的引用 refs/heads/master。
致命:参数“master”不明确:未知修订或路径不在工作树中。
使用“--”将路径与修订分开
更多可能有用的信息:每次我删除损坏的文件时,另一个文件都会取而代之。我开始认为这与 master 分支指向错误的东西有关。因为我假设 head 指向 master。
一天后:
所以我让我的朋友知道了这件事,他能够查看日志,他说日志中的哈希值与文件夹中的对象不匹配。他尝试将主分支重置为日志或类似的东西,我有点迷茫。希望这对你有帮助
答案1
存储库存在,但我的所有提交都消失了。
你到底是什么意思?工作树还在吗?.git/
存在吗?里面有什么文件吗?
您发布的消息表明该文件.git/HEAD
不存在。它定义了工作树的预期状态(您已签出的内容)。如果该文件不见了,git 就不知道您在哪里。
您可以尝试自己创建文件,内容如下:
ref: refs/heads/master
如果您位于不同的分支,只需将“master”替换为分支名称即可。如果您不在分支上,则情况会更加复杂。
.git/logs/HEAD
记录 HEAD 的过去状态,后面的行位于底部。此示例行显示了结帐:
25f2a6099fb5f9f2192a510c42f704f9fc4bcecb 65abb1a3dc102e2498860f01fb179cda4c51decb Rainer Blome <[email protected]> 1346938344 +0200 checkout: moving from master to MySuperBranch
前面的 SHA1 指的是提交。您应该能够在分支日志中找到它们,例如.git/logs/refs/heads/master
。
您提供的 git reflog 输出似乎refs/heads/master
也缺失了。其唯一内容应该是最新提交的 SHA1(以及换行符)。您可以在分支日志的末尾找到最新的 SHA1,例如.git/logs/refs/heads/master
。
答案2
如果 .git/HEAD 存在并且其内容是,ref: refs/heads/master
则检查文件 refs/heads/master 它必须包含最后一次提交的 sha1。
如果该文件已损坏并且充满 NULL 字符,请编辑该文件并放入最新提交.git/logs/HEAD
或最后一次提交之前的提交的 sha1。
然后做git reset --hard 'sha1 of the commit that you selected'
答案3
答案4
在网上浏览了一段时间后,我终于找到了这个并且它有效。
git fetch origin
git reset --hard origin/master