我昨天做了一些承诺,但是没有推动。今天,我醒了,我试图将其推入,我已经
错误:索引文件sha1签名错误 致命:索引文件损坏
我试图:
$ del .git\index
$ git reset
,然后尝试再次推送我的提交,但是失败了,现在我拥有了
致命:无法锁定参考'HEAD':无法解析参考'refs / heads / light-mode':参考已损坏
这是怎么回事?我不想丢失自己的提交,但更重要的是,我不想丢失对项目的本地更改。
答案 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
中:查看commits
和other
文件夹。 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
:)