Как решить «Ошибка: неверный индекс - Фатальный: поврежден индексный файл» при использовании Git

Послеgit initЯ добавил и зафиксировал несколько файлов, внес некоторые изменения, добавил и зафиксировал. Установите демон git (работающий под Cygwin на WinXP) и клонируйте репозиторий один раз. Теперь я получаю эту ошибку с клонированным хранилищем:

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

Есть ли способ исправить это, кроме получения новой копии хранилища?

 CB Bailey12 июл. 2009 г., 13:27
Это в клонированном репозитории или в оригинальном репозитории? Команда clone выдает какие-либо ошибки?

Ответы на вопрос(11)

ми, я использовал это скучное решение:

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

Сделал трюк. Кстати, я сделалsed в корне проекта, как и предполагал @hobs. Выучил мой урок.

 01 мая 2017 г., 05:10
Это не очень хорошо, если вы были в середине слияния, создали ветви или выполнили какие-либо коммиты после клонирования или по ряду других сценариев ... Клонирование новой копии репо вряд ли является решением, и Я полагаю, это пахнет нетерпением (лучше оставить, когда в истинной щепотке). Гораздо лучше на самом деле диагностировать происходящее и восстанавливать существующий индекс репо, что обычно относительно легко сделать. Иногда вы можете просто переименовать файл индекса (или удалить его, если вы уверены, что он вам больше не понадобится) и позволить Git создать новый (используя git-reset или git-checkout).
 21 февр. 2017 г., 12:06
Это великолепно :)

вы случайно повредили файл .git / index с помощью sed в корне вашего проекта (возможно, рефакторинг?) Примерно так:

sed -ri -e "s/$SEACHPATTERN/$REPLACEMENTTEXT/g" $(grep -Elr "$SEARCHPATERN" "$PROJECTROOT")

чтобы избежать этого в будущем, просто игнорируйте двоичные файлы с помощью вашего grep / sed:

sed -ri -e "s/$SEACHPATTERN/$REPLACEMENTTEXT/g" $(grep -Elr --binary-files=without-match "$SEARCHPATERN" "$PROJECTROOT")
 30 янв. 2019 г., 20:36
Я реорганизовал весь свой проект вместо «src» папка в IntelliJ и была эта проблема. Это объясняет, почему у меня были такие странные ошибки!
 11 мар. 2015 г., 02:34
Я сломал его с помощью команды # find ./ -type f -exec sed -i 's / Politician / Legislator / g & apos; {} \; Выполнение того, что рекомендует этот ответ, во-первых, не сломало бы его, но принятый ответ восстановил ущерб, который я нанес. Это отличная профилактика.
 01 мар. 2012 г., 13:24
Если вы не против потерять изменения в.git/index, вы всегда можете удалить его и восстановить сgit reset (без--hard!).
 22 февр. 2018 г., 20:30
@RyanMortensen Вы можете попробовать перевернутьsed с чем-то вродеfind .git/ -type f -exec sed -i 's/Legislator/Politician/g' {} \;  Это может помочь, если ваш.git/ настолько испорчен, чтоgit reset не будет работать. Или, может быть, вы хотите восстановить свой существующий.git/index не удаляя его. Конечно, это не удастся, если в вашем исходном коде или индексе уже есть некоторые «Законодатели».
 11 июл. 2018 г., 10:20
Спасибо, @hobs, ты избавил меня от многих проблем - я решил их, перевернувsed заменив мойnew_string со мнойold_string!

rm -f .git/index
git reset

НО это не сработало.The solution? For some reason I had others .git folders in sub directories. I delete those .git folders (not the principal) and git reset снова. Как только они были удалены, все снова заработало.

почему я начал получать ошибки в первую очередь. Когда я вышел из системы вчера, это было нормально. Войдите в систему этим утром, это было не так.

rm .git/index

git reset
 21 окт. 2018 г., 07:23
Это сработало для меня, хотя и удалило все добавленные файлы из git. Я должен был запустить Git Add для этих файлов
Решение Вопроса

the staging area for commits (Т.е..git/index), вы можете просто удалить индекс (сделайте резервную копию, если хотите), а затем восстановить индекс до версии в последнем коммите:

В OSX / Linux:

rm -f .git/index
git reset

В Windows:

del .git\index
git reset

(Thereset Команда выше такая же, какgit reset --mixed HEAD)

Вы также можете использовать более низкий уровеньводопровод git read-tree вместоgit reset.

Если проблема сindex for packfile, вы можете восстановить его, используяgit index-pack.

 13 июн. 2013 г., 21:15
Когда я писал этот ответ, его не было ... Во всяком случаеgit reset --keep безопасная формаgit reset --hard; git reset --mixed вообще не касается рабочего каталога.
 13 июн. 2013 г., 15:30
было бы безопаснее использоватьgit reset --keep вместо? вTower Git Cheat Sheet это объясняется как:Reset your HEAD pointer to a previous commit and preserve uncommitted local changes
 29 февр. 2012 г., 18:46
Я случайно сделал:w! в:Gstatus (от fugitive.vim). Этот ответ спас меня от растягивания волос.
 15 июн. 2012 г., 09:23
Я знаю, что мы тоже не нравимся "мне" сообщения - но "я тоже". Эквивалент в Windowserase /s .git\indexМне нужна былаerase .git\index.lock тоже.
 28 янв. 2013 г., 17:44
Привет, у меня была такая же проблема с поиском и заменой, но git reset говорит мне, что в .git / objects / pack / есть два файла пакета, к которым нет доступа. У тебя есть идея?

аботать для вас как есть.

Допустим, у вас есть родительский репозиторий с именемdevНапример, и ваш субмодульный репозиторий называетсяapi.

если вы внутриapi и вы получите ошибку, упомянутую в этом вопросе:

error: bad index file sha1 signature fatal: index file corrupt

index файл не будет внутри.git папка. На самом деле,.git даже не будет папкой - это будет текстовый документ с расположением реальных данных .git для этого хранилища. Скорее всего как то так

~/dev/api $ cat .git gitdir: ../.git/modules/api

Итак, вместоrm -f .git/index, вам нужно будет сделать это:

rm -f ../.git/modules/api/index git reset

или, в более общем плане,

rm -f ../.git/modules/INSERT_YOUR_REPO_NAME_HERE/index git reset

.git каталог под одной из подкаталогов. Чтобы исправить это, проверьте, есть ли там другие каталоги .git, удалите их и попробуйте снова.

 26 мар. 2018 г., 21:49
Несколько других ответов уже предоставили эту информацию.

вы используете Windows OS)

 09 мая 2016 г., 09:27
Не задавайте ответ, который вы не знаете.

но я только что перезагрузил свою машину (mac), и проблема исчезла, как будто ее никогда не было. Я ненавижу звучать как парень поддержки ...

 26 мар. 2018 г., 21:49
Несколько других ответов уже предоставили эту информацию.

чтобы получить (возможно?) Больше информации:

git fsck --full

Ваш ответ на вопрос