我可以恢复损坏的本地 Git 存储库吗

问题描述 投票:0回答:1

希望有人能帮忙解决这个问题。 我坦白承认我不是 Git 专家,因此以下内容中可能存在一些错误的假设。

我们使用 Git 进行源代码控制,并使用 SourceTree GUI 作为前端。 昨天,当我工作时,我们公司的防病毒软件(Sentinal One)将 Source Tree 识别为潜在威胁并将其阻止。 随后它弹出一个烤面包机通知,说它已经修复了。 我不知道它到底做了什么,但它使我的本地 Git 存储库处于损坏状态。 缺少一堆源文件,.git 文件夹缺少几个必要的文件(Head、Fetch_Head、Orig_Head、config 和 index)。 该存储库在源代码树中不再可用,并且“Git 分支”报告它不是有效的 Git 存储库。 我已经复制了损坏的存储库,所以至少我知道如果我尝试的事情让事情变得更糟,我可以回到这一点。

偶尔我尝试从不相关的存储库复制 HEAD 文件,这似乎解决了 Git 分支问题。 它现在报告为有效目录并报告我的一些分支。 它没有报告的是我只在本地保存的两个分支(我不想将它们推送到远程,直到它们准备好生产),这代表了大量的工作。 我可以只是从中央存储库重新克隆,但我会丢失这些分支,因为它们从未被推送过。

我已经针对该目录运行了 Git reflog,我可以看到我在这些分支之间移动所采取的各种操作,因此日志看起来仍然完整。 偶尔我尝试了该功能的 git checkout,但报告称它“与 Git 已知的文件不匹配”。 最后,我尝试了 git fsck 并报告了一个错误: refs/heads/feature/myfeature 无效的 reflog 条目,后面跟着一堆丢失的 blob 和悬空的提交和树。 所以我的本地特色仍然以某种形式为人所知。

我最好的猜测是,实际源代码仍然保存在存储库中的某个位置,但源代码树的突然阻塞导致元数据损坏。 我发现一些帖子解释了如何自动修剪源数据,使其与元数据匹配,但我想我想要相反的情况。 我想从源数据重建元数据。

这可能吗? 有没有人可以建议什么可以帮助我康复。 (对帖子的长度表示歉意,但我想提供尽可能多的信息)

git atlassian-sourcetree
1个回答
0
投票

我尝试了 git fsck 并报告了一个错误:refs/heads/feature/myfeature 无效的引用日志条目,后面跟着一堆丢失的 blob 和悬空的提交和树。

如果

git fsck
报告本地功能分支中缺少 blob,则您的数据很可能会丢失。 Blob 对象是已提交文件内容的二进制表示形式。如果存储库的对象存储中缺少 blob 对象,则 Git 无法签出其树指向这些 blob 的提交。

在您的情况下,更改的 blob 可能仍然完好无损,并且

git fsck
正在发出属于也可从其他分支访问的提交的缺失 blob(与分支分歧之前创建的提交相关联的 blob)。

您可以尝试的一件事是检查您的防病毒软件是否仍然有这些文件。希望它们没有被删除,而只是被删除并隔离。您可以将存储库的路径添加到防病毒例外中,然后从隔离区中恢复它们。

© www.soinside.com 2019 - 2024. All rights reserved.