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?
This question is related to
git
corruption
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.
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")
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...
You can also try for restore to previous version of the file (if you are using windows os)
Since the above solutions left me with continued problems, I used this dull solution:
Did the trick. Btw, I did a sed
on the project root as @hobs guessed. Learned my lesson.
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
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
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.
A repo may seem corrupted if you mix different git
versions.
Local repositories touched by new git versions aren't backwards-compatible with old git versions. New git repos look corrupted to old git versions (in my case git 2.28 broke repo for git 2.11).
Updating old git version may solve the problem.
None of the existing answers worked for me.
I was using worktrees, so there is no .git folder.
You'll need to go back to your main repo. Inside that, delete .git/worktrees/<name_of_tree>/index
Then run git reset as per other answers.
rm -f .git/index
git reset
More info at https://www.chris-shaw.com/blog/quick-fix-for-git-corrupt-index
This sounds like a bad clone. You could try the following to get (possibly?) more information:
git fsck --full
I did a simple trick. I clone the repo to a new folder. Copied the .git folder from the new folder to repo's old folder, replacing .git there.
Source: Stackoverflow.com