【问题标题】:Local git repo corrupted? All files recognised as new and pull failed - Cannot lock ref, reference broken本地 git repo 已损坏?所有文件都被识别为新文件并且拉取失败 - 无法锁定参考,参考损坏
【发布时间】:2021-09-27 10:14:11
【问题描述】:

我和其他人一起做一个 repo,其中我们从 bitbucket repo 提交/拉取。

我需要进行拉取,但是当我尝试时,我收到一个错误,指出我的 IDE 中的引用已损坏,如下所示:

除此之外,在我的 IDE 中,它似乎显示所有文件都是“新的”并显示它们需要提交;实际上,不应该有任何需要提交的东西。

我使用了here的解决方案,所以我跑了:

rm .git/refs/remotes/origin/2.0

之后我运行了git fsck 命令,但得到了以下输出:

error: refs/heads/2.0: invalid sha1 pointer 0000000000000000000000000000000000000000
error: invalid HEAD
error: bad ref for .git/logs/HEAD
error: bad ref for .git/logs/refs/heads/2.0
dangling blob 08f12165c07042e539c6ac88b365a96d35bef0a4
dangling blob 9a62767cc1463b4892d58f7d55a7c7c7d9e5d735
dangling blob 31737e10f9c73a51d0b30d0075f3a0d26cc7e9a0
dangling commit 609378008f36807d5c2d1062cfbedec0cc467943
dangling blob 969319da42df899791d3c85e3b3c8ad0742968b0
dangling blob b8a5369235ac3abd2628b7df85f0693126fe70c5
dangling blob f7e58848298e6c1efffa3ebc2dd9b18d1fbc1d09
dangling blob 0d2696322077d2483d9ee768269600e0010456c6
dangling blob 8a38dbed0980daed0323980af726de6bf66e8663
dangling blob 9238c0fad597aa49c1270b301dca8c6b9dfd3da0
dangling blob 166c6068c051c34b36cc44f00e9c36f7a6c22cda
dangling blob 263ce1d6f1cc89702562499e664cdc5d312cea3d
dangling blob 47fe36f31eea1bbad3d90d90637c5840718e1052
dangling blob b70eed498d36e1c577837be651cebb87bcad383c
dangling blob 861f5f6572390895b68134495c1c4ac7dea1a363

所以我不确定从这里去哪里?

【问题讨论】:

  • 如果没有什么要提交的,你能不能只删除 repo 并再次克隆它。可能不是您正在寻找的修复类型,但是当奥卡姆剃刀有效时,为什么要采取不同的做法
  • @Jacob 可能,但我不会丢失所有提交历史 - 它还连接到辅助远程仓库以使事情变得更加复杂。
  • 因为是二级repo,那就不,不要跟我的想法。但是,为了将来在只有一个远程仓库的情况下参考,不,您不会因为删除本地仓库而丢失提交历史记录。只要您的所有提交都被推送,远程仓库就会存储历史记录。

标签: git git-pull


【解决方案1】:

你的裁判有问题,但你已经知道了。好消息:您的实际提交数据似乎很好,只是一些分支指针和 reflog interies 出了问题。您可以安全地删除它们。

立即为您的工作树创建备份!

由于您的 HEAD 引用已损坏,您需要找到一个有效的提交。理想情况下,它尽可能靠近您的工作树。如果这不可能,请获取您的 origin/masterorigin/main 或与您的同行共享的任何其他开发分支的提交哈希。

然后,再次确保您有一个有效的 HEAD 引用(将丢失未提交的更改!):

git checkout -f -b fixing-things $origin_master_hash

您的本地分支 2.0 指向无效的 ref(显然是虚拟的 0000… 提交)。你也可以删除它:

git update-ref 2.0

如果不行,直接从文件系统中删除:

rm .git/refs/heads/2.0

现在过期损坏的 reflog 条目或删除它们,如果过期不起作用:

git reflog delete HEAD
git reflog delete 2.0

(或删除:rm .git/logs/HEADrm .git/logs/refs/heads/2.0

【讨论】:

  • 我需要结帐才能掌握吗?当我尝试这样做时,它告诉我我对文件列表进行了未提交的更改,但这是一个较小的列表,然后它在其他地方向我显示了明显的更改文件。
  • @Brett 抱歉,这不是很聪明。我已经更改了答案,以便您从当前提交创建一个新分支。这不需要切换分支并避免未提交更改的问题。
  • 哈哈好的,现在尝试创建新分支时出现新错误。 fatal: You are on a branch yet to be born.
  • 哦,对了。因为你的HEAD 坏了。这将比我想象的更棘手。 现在备份您的工作树。然后我们需要找到一个尽可能接近你现在丢失的结帐树的提交
  • 您的意思是对文件进行手动物理备份吗?
猜你喜欢
  • 2018-04-23
  • 1970-01-01
  • 2020-09-21
  • 2011-10-09
  • 2018-08-19
  • 1970-01-01
  • 2021-05-02
  • 1970-01-01
  • 2018-01-23
相关资源
最近更新 更多