Git无法锁定参考“ HEAD”

时间:2019-09-15 14:02:42

标签: git

我昨天做了一些承诺,但是没有推动。今天,我醒了,我试图将其推入,我已经

  

错误:索引文件sha1签名错误   致命:索引文件损坏

我试图:

$ del .git\index
$ git reset

,然后尝试再次推送我的提交,但是失败了,现在我拥有了

  

致命:无法锁定参考'HEAD':无法解析参考'refs / heads / light-mode':参考已损坏

这是怎么回事?我不想丢失自己的提交,但更重要的是,我不想丢失对项目的本地更改。

4 个答案:

答案 0 :(得分:3)

您的Git存储库已损坏。此时,不可能说是什么是谁。常见的罪魁祸首是使用Dropbox或类似的东西来存储.git目录。 1 很少见的罪魁祸首是实际的硬件故障,例如,旋转生锈的磁盘或SSD发生故障。 >

此消息:

fatal: cannot lock ref 'HEAD': unable to resolve reference
'refs/heads/light-mode': reference broken

发生是因为您当前的分支light-mode的哈希ID存储在.git/packed-refs.git/refs/heads/light-mode中。这些文件之一或全部包含垃圾,或不再包含有效提交的哈希ID。再者,实际上不可能猜测哪些文件存在哪些特定问题,也不可能是由哪些程序或硬件故障引起的。您所做的工作 可能已被不可挽回地损坏或破坏。

如果您知道昨天进行的提交的正确哈希ID,则可以尝试使用git checkout hash恢复该哈希ID。如果所有其他方法均失败,则可以运行git fsck --lost-found:对于Git打印 dangling commit dangling blob 的每个哈希ID,Git还将保存内容 提交到.git/fsck/lost-found中:查看commitsother文件夹。 other文件夹将包含找到的文件的数据。这些文件的名称不再可用,但是您可能会识别一些重要内容,因此可以说: aha,这就是我想要返回的重要文件往回走。


1 通常,这是一个非常糟糕的主意,因为Dropbox和Git争夺谁将控制特定文件的特定内容。它可以工作一段时间,从而导致错误的安全感。然后-通常在重要的演讲或上课的截止日期之类的之前- boom ,Dropbox决定将六个关键的Git文件回滚到以前的某个版本,然后您的工作就消失了。

答案 1 :(得分:0)

如果您在Linux中进行操作,则可以删除索引(如果需要,可以创建备份副本),然后在上一次提交时将索引恢复为版本

rm -f .git / index

git reset

答案 2 :(得分:0)

我有类似的经历,对我来说问题是我使用 Git Bash 以及内置的 Visual Studio Git 插件。

对他有用的是删除以下位置的分支文件 .git/refs/heads/branch_name

然后我回到 Git bash 并执行以下命令 git reset,我很高兴。

我认为给我的教训是,今后我将一直使用 Git Bash。

答案 3 :(得分:0)

试试这个

 git remote set-head origin --auto
<块引用>

为指定的远程设置默认分支(即符号引用 refs/remotes//HEAD 的目标)。不需要远程的默认分支,但允许指定远程的名称代替特定分支。例如,如果 origin 的默认分支设置为 master,则可以在通常指定的任何位置指定 origin

:)