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 corruptIs there any way to fix this, other than getting a new copy of the repository?
120 Answers
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/Windows(With Git bash):
rm -f .git/index
git resetOn Windows (with CMD and not git bash):
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.
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") 5 I had that problem, and I try ti fix with this:
rm -f .git/index
git resetBUT 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.
This sounds like a bad clone. You could try the following to get (possibly?) more information:
git fsck --full 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.
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 2 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
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.
This issue is occoured due to changes in git file or brach. Then you need to run this command on your cmd.
- del .git\index
- git reset --hard
After run 2 commands your Git Repo is working well
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.
Cloning remote repo and replacing the .git folder from it to problematic local directory solved the issue.
I committed my changes and suddenly my laptop went off due to battery issue and then I got this fatal index corrupt error and Desktop github couldn't locate this git repo. So I ran below mentioned commands using git-bash and everything went back fine.
rm -f .git/index
git reset Use this if you want to keep your last changed files
rm -f .git/index
git read-tree HEAD 1 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.
On Windows PowerShell, it should be
rm -Force .git/index
git reset I had the same error and attempted to fix it as described in the accepted answer. However, immediately after resetting my index in .git/index it became corrupted again.
The problem was, that I was using git bisect yesterday to find a bug, but forgot to run git bisect reset to clean up afterwards at the end of the day. Today as I started making changes git got confused, as it was still in bisect mode and I was attempting to apply changes. I also couldn't just run git bisect reset, because there were already changes.
To fix this problem run the following in the git bash in your root directory:
git stash -m <message>
git bisect reset # You are now most likely in detached head mode
git checkout <branch>
git stash apply # If you have multiple stashes, make sure to apply the correct oneNote that there is no need to remove .git/index and reset the index in this case!
Do the following steps.
- manually delete the index file from .git folder
- Run the command in your project directory
git reset
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.
4rm -f .git/index
git resetMore info at
1You can also try for restore to previous version of the file (if you are using windows os)
1