Git commit перестает работать - ошибка создания деревьев
Я не могу зафиксировать изменения:
$ git commit
error: invalid object 100644 13da9eeff5a9150cf2135aaed4d2e337f97b8114 for 'spec/routing/splits_routing_spec.rb'
error: Error building trees
Я пробовал до сих пор:
$ git fsck | grep 13da
missing blob 13da9eeff5a9150cf2135aaed4d2e337f97b8114
а также:
$ git prune
error: Could not read 1394dce6fd1ad15a70b2f2623509082007dc5b6c
fatal: bad tree object 1394dce6fd1ad15a70b2f2623509082007dc5b6c
а также:
$ git fsck | grep 13da
missing blob 13da9eeff5a9150cf2135aaed4d2e337f97b8114
но ничего не помогло. Должен ли я удалить файл, зафиксировать и повторно ввести обратно? Я готов потерять немного истории, если он вернет git.
Ответы
Ответ 1
У вас может быть поврежден объект в репозитории git.
Если у вас есть удаленный или другой клон этого репозитория, вы можете получить там проблемный файл и просто заменить его на локальное репо.
Файл, который вы хотите, будет находиться в:
/repo/.git/objects/13/da9eeff5a9150cf2135aaed4d2e337f97b8114
Ответ 2
Эта ошибка означает, что у вас есть файл с hash 13da9eeff5a9150cf2135aaed4d2e337f97b8114
, и этот хеш отсутствует в .git/objects/../
или он пуст, когда эта ошибка произошла, у меня есть только этот хеш по ошибке, без пути к файлу, то я попытался сделать git gc --auto
и git reset --hard
, и после одной из этих команд (эти команды не исправили мою проблему), у меня есть путь к файлу, который вызывает эту ошибку.
Вам нужно просто сгенерировать хэш объекта:
git hash-object -w spec/routing/splits_routing_spec.rb
Для получения дополнительной информации см. документация, в этой документации есть дополнительный способ устранения этой ошибки.
P.S.
Это был единственный способ, который мне помог.
Ответ 3
git reset --hard
должен вернуть ваш репозиторий в нормальное состояние, но вы потеряете незафиксированные изменения.
Ответ 4
Если проблемный файл добавляется вашим изменением, вы можете просто удалить его из индекса и добавить его снова:
git reset <file>
git add <file>
Ответ 5
Для меня это были только проблемы с разрешениями. Когда я бегаю с 'sudo', это сработало. возможно, что-то связано с mac environmentmnet
Ответ 6
Простота решения проблемы, если вы не очень заинтересованы в отслеживании файла, вы можете дублировать файл и удалять оригинал, сначала зафиксировать удаление и добавление, а затем снова переименовать в оригинал.
Git должен вернуться обратно нормально
Ответ 7
Это может быть вызвано некоторыми сторонними приложениями синхронизации, такими как Dropbox и Jianguoyun. На мой опыт могут быть два пути:
- Вы можете попытаться отменить последние операции синхронизации.
- Удалите связанные файлы из папки, зафиксируйте, а затем верните файлы.
Ответ 8
В моем случае это поврежден файл в удаленной ветке.
Я решил это:
- удалите удаленные ветки вообще
$ git remote rm origin
- снова добавьте удаленный компьютер:
$ git remote add origin <the-remote-url>
- снова введите пульт дистанционного управления:
$ git fetch origin
- reset -hard к нужной ветки по происхождению (скажем,
develop
): $ git reset --hard origin/develop
Затем все возвращается к норме.