首页 > 解决方案 > 在迁移之前修复损坏的 Git 存储库

问题描述

我已启用 Git 的源代码指向不再运行的死服务器。我正在尝试将此代码推送到具有所有过去历史记录、标签和分支的新存储库中。

我删除了旧的原点并添加了新的原点。在推动时,我发现它有损坏的对象。

使用命令git fsck --full我可以看到broken link from to, dangling blob, dangling commit and missing blob.

这是否意味着分支和标签也会受到影响?我可以丢失一些历史记录,但我需要毫发无损的所有分支和标签。

我该如何解决这个问题?

标签: gitversion-control

解决方案


这是否意味着分支和标签也会受到影响?

这取决于。

很难对你的问题给出一个有根据的答案,因为你的情况在很多方面可能是独一无二的。鉴于提供的信息量,根本不可能提出“只做abc ”的答案。

相反,我将列出您遇到的问题的可能解决方案的来源。

从到断开的链接

考虑研究“如何修复从树到树的 Git 错误断开链接? ”的公认答案。这个问题本身听起来很像你所看到的。

根据接受的答案,您似乎有可能通过放弃相关reflog条目来摆脱错误报告。

悬垂的斑点

考虑研究“ Recover dangling blobs in Git ”的答案。

悬空提交

这些是不属于任何分支的提交。我会尝试找到所有这些,并在迁移之前将它们放在分支上。请参阅“什么是 Git 存储库中的悬空提交/blob,它们来自哪里? ”。

缺少斑点

看起来您可以通过删除丢失的 blob 来消除此错误。或者可能是该 blob 被重命名,现在它是一个悬空的 blob?考虑研究“如何从 Git 存储库中丢失的 blob 中恢复? ”的公认答案。


推荐阅读