Подтвердить что ты не робот

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.

4b9b3361

Ответ 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

Затем все возвращается к норме.