问题
After git init
, I added and committed a few files, made some changes, added and committed. Set up the git daemon (running under Cygwin on WinXP) and cloned the repository once.
Now, I get this error with the cloned repository:
$ git status
error: bad index file sha1 signature
fatal: index file corrupt
Is there any way to fix this, other than getting a new copy of the repository?
回答1:
If the problem is with the index as the staging area for commits (i.e. .git/index
), you can simply remove the index (make a backup copy if you want), and then restore index to version in the last commit:
On OSX/Linux:
rm -f .git/index
git reset
On Windows:
del .git\index
git reset
(The reset
command above is the same as git reset --mixed HEAD
)
You can alternatively use lower level plumbing git read-tree
instead of git reset
.
If the problem is with index for packfile, you can recover it using git index-pack
.
回答2:
You may have accidentally corrupted the .git/index file with a sed on your project root (refactoring perhaps?) with something like:
sed -ri -e "s/$SEACHPATTERN/$REPLACEMENTTEXT/g" $(grep -Elr "$SEARCHPATERN" "$PROJECTROOT")
to avoid this in the future, just ignore binary files with your grep/sed:
sed -ri -e "s/$SEACHPATTERN/$REPLACEMENTTEXT/g" $(grep -Elr --binary-files=without-match "$SEARCHPATERN" "$PROJECTROOT")
回答3:
I had that problem, and I try ti fix with this:
rm -f .git/index
git reset
BUT it did not work. The solution?
For some reason I had others .git folders in sub directories. I delete those .git folders (not the principal) and git reset
again. Once they were deleted, everything worked again.
回答4:
This sounds like a bad clone. You could try the following to get (possibly?) more information:
git fsck --full
回答5:
This worked for me. Although i'm curious of the reason I started getting the errors in the first place. When I logged out yesterday, it was fine. Log in this morning, it wasn't.
rm .git/index
git reset
回答6:
Since the above solutions left me with continued problems, I used this dull solution:
- clone a new copy of the repo elsewhere
- copy the fresh .git directory into the (broken) repo that contained the changes I wanted to commit
Did the trick. Btw, I did a sed
on the project root as @hobs guessed. Learned my lesson.
回答7:
Note for git submodule users - the solutions here will not work for you as-is.
Let's say you have a parent repository called dev
, for example, and your submodule repository is called api
.
if you are inside of api
and you get the error mentioned in this question:
error: bad index file sha1 signature
fatal: index file corrupt
The index
file will NOT be inside of a .git
folder. In fact, the .git
won't even be a folder - it will will be a text document with the location of the real .git data for this repository. Likely something like this:
~/dev/api $ cat .git
gitdir: ../.git/modules/api
So, instead of rm -f .git/index
, you will need to do this:
rm -f ../.git/modules/api/index
git reset
or, more generally,
rm -f ../.git/modules/INSERT_YOUR_REPO_NAME_HERE/index
git reset
回答8:
This issue can occur when there is a .git
directory underneath one of the subdirectories. To fix it, check if there are other .git directories there, and remove them and try again.
回答9:
I was facing same problem Rename index file in .git/index and then git reset work for me.
回答10:
rm -f .git/index
git reset
More info at https://www.chris-shaw.com/blog/quick-fix-for-git-corrupt-index
回答11:
This is ridiculous but I just have rebooted my machine (mac) and the problem was gone like it has never happened. I hate to sound like a support guy...
回答12:
You can also try for restore to previous version of the file (if you are using windows os)
来源:https://stackoverflow.com/questions/1115854/how-to-resolve-error-bad-index-fatal-index-file-corrupt-when-using-git