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

Проблемы с повреждением git repo

My git repo поврежден во время выполнения команды find и replace (см. здесь Git reset после поиска и замены). Поэтому я удалил несколько файлов пакетов, о которых git сказал мне, что их невозможно достичь. Поэтому я запустил rm./.git/index, git reset. При запуске git commit я получил это сообщение:

fatal: corrupt tree sha $someSHA

Наконец git fsck, моя рабочая директория прошла чистку, и я смог зафиксировать ее. Теперь pb заключается в том, что когда я запускаю git checkout some_other_branch, я получил это сообщение

fatal: unable to read tree $someSHA

(появление $someSHA одинаково). Кто-нибудь может мне помочь?

Изменить 1:

когда я запускаю git fsck --full, я получаю серию

error: refs/remotes/repo0/master does not point to a valid object!
error: refs/remotes/repo1/new-version does not point to a valid object!
...

то серия

broken link from    tree d935b909f76ea92728d71038d0a67384353e65e1
              to    blob 05b97658ebd47fee25b76d80ac76cbd07d77961d
...

а затем некоторые отсутствующие blobs...

Изменить 2:

Я запустил git log -raw -all -full-history - subdir/my-file, и я получаю

error: refs/remotes/repo0/master does not point to a valid object!
error: refs/remotes/repo1/new-version does not point to a valid object!
...
error: Could not read 9096eb9d9dcbdf15a04e0a7c78a3744936f82ac7
fatal: cannot simplify commit 8dfd8e3d5b698dc979300d93d8e89a757abf6ec6 (because of 9096eb9d9dcbdf15a04e0a7c78a3744936f82ac7)

Изменить 3:

Я побежал git fsck --full, я получаю многочисленные строки так

error: packfile .git/objects/pack/pack-fbfd8042e1e96bf5ffff88f9b5a230b8f5e4d4c4.pack does not match index
fatal: packfile .git/objects/pack/pack-fbfd8042e1e96bf5ffff88f9b5a230b8f5e4d4c4.pack cannot be accessed
...

при запуске git checkout в другую ветку я получил множество сообщений:

error: packfile .git/objects/pack/pack-3e7a0c040a5e3d1c21b91256d583424d82a59706.pack does not match index
warning: packfile .git/objects/pack/pack-3e7a0c040a5e3d1c21b91256d583424d82a59706.pack cannot be accessed
....
fatal: unable to read tree 2ad71d368b65eff0b6fec1ef72c6fdde6e80edad

Изменить 4:

следуя предложенному ответу, я распаковал файлы, и когда я проверил, я получил некоторые строки:

error: packfile .git/objects/pack/pack-fbfd8042e1e96bf5ffff88f9b5a230b8f5e4d4c4.pack does not match index
warning: packfile .git/objects/pack/pack-fbfd8042e1e96bf5ffff88f9b5a230b8f5e4d4c4.pack cannot be accesse....

а затем серия строк, начинающихся с

 error: Your local changes to the following files would be overwritten by checkout:
.idea_local_work/.name
.idea_local_work/libraries/sass_stdlib.xml
.idea_local_work/scopes/scope_settings.xml
... and then aborting
4b9b3361

Ответ 1

Сначала: создайте резервную копию своего каталога .git, если в этом процессе вы повредите ситуацию. Тогда:

  • Верните лучшую версию доступных пакетов packfiles.
  • Для каждого коррумпированного пакета файлов выполните:

    mv .git/objects/pack/pack-**yourpack**.pack oldpack
    git-unpack-objects -r < oldpack
    
  • Запустите git fsck --full и git checkout снова, дайте нам вывод.

  • Похоже, теперь вы сможете проверить, но вам придется запускать git checkout -f **yourbranch**, так как у вас есть изменения в рабочем каталоге, которые еще не были выполнены. Эти изменения будут потеряны, если вы запустите git checkout -f.