git初始化后,我添加并提交了一些文件,做了一些修改,添加并提交。设置git守护进程(在WinXP上的Cygwin下运行)并克隆一次存储库。 现在,我得到这个错误与克隆的存储库:

$ git status
error: bad index file sha1 signature
fatal: index file corrupt

除了获得一个新的存储库副本之外,还有什么方法可以修复这个问题吗?


当前回答

这对我很管用。虽然我很好奇的原因,我开始得到错误在第一个地方。我昨天注销的时候,一切正常。今早登录时发现不是。

rm .git/index

git reset

其他回答

git子模块用户注意——这里的解决方案不适合你。

例如,假设您有一个名为dev的父存储库,而子模块存储库名为api。

如果你在API内部,你得到了这个问题中提到的错误:

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

索引文件不会在.git文件夹中。事实上,.git甚至不会是一个文件夹——它将是一个文本文档,其中包含这个存储库的真正。git数据的位置。可能是这样的:

好吧,滚出去 gitdir: - . git / modules /火

所以,你需要这样做,而不是rm -f .git/index:

Rm -f ../.git/modules/api/index git重置

或者,更一般地说,

rm -f ../.git/modules/INSERT_YOUR_REPO_NAME_HERE/index . xml git重置

由于上述解决方案给我带来了持续的问题,我使用了这个乏味的解决方案:

在其他地方克隆一个新的副本 将新的.git目录复制到包含我想提交的更改的(损坏的)repo中

成功了。顺便说一句,我做了一个sed项目根@hobs猜测。我吸取教训了。

克隆远程repo并将.git文件夹从它替换到有问题的本地目录解决了这个问题。

我提交了我的更改,突然我的笔记本电脑由于电池问题关闭了,然后我得到了这个致命的索引损坏错误,桌面github无法定位这个git回购。所以我使用git-bash运行下面提到的命令,一切都恢复正常。

rm -f .git/index
git reset

这听起来像是一个糟糕的克隆。你可以试试下面的方法来获取(可能吗?)更多信息:

git fsck --full