Как исправить ошибку git с ошибкой ссылки из дерева в дерево?

Я прервал транзакцию, и когда я попытаюсь снова, у меня возникла ошибка с объектами, которые были пусты или повреждены, следуя другому вопросу, я удаляю все пустые файлы и когда я запускаю

git fsck --full 

Я получил эту ошибку

Checking object directories: 100% (256/256), done.
Checking objects: 100% (48774/48774), done.
error: d193ccbc48a30e8961e9a2515a708e228d5ea16d: invalid sha1 pointer in cache-tree
error: df084ac4214f1a981481b40080428950865a6b31: invalid sha1 pointer in cache-tree
broken link from    tree 4bf4869299b294be9dee4ecdcb45d2c204ce623b
          to    tree df084ac4214f1a981481b40080428950865a6b31
broken link from    tree 4bf4869299b294be9dee4ecdcb45d2c204ce623b
          to    tree d193ccbc48a30e8961e9a2515a708e228d5ea16d
missing tree df084ac4214f1a981481b40080428950865a6b31 
missing blob a632281618ca6895282031732d28397c18038e35
missing tree d193ccbc48a30e8961e9a2515a708e228d5ea16d
missing blob 70aa143b05d1d7560e22f61fb737a1cab4ff74c6
missing blob c21c0545e08f5cac86ce4dde103708a1642f23fb
missing blob 9f341b8a9fcd26af3c44337ee121e2d6f6814088
missing blob 396aaf36f602018f88ce985df85e73a71dea6f14
missing blob 87b9d1933d37cc9eb7618c7984439e3c2e685a11

И знаю, что я не знаю, как я мог исправить эту проблему.

Ответ 1

С Git 2.10 (Q3 2016) вы можете узнать больше о происхождении этих неработающих ссылок.

git fsck --name-objects

См. commit 90cf590, зафиксировать 1cd772c, commit 7b35efd, commit 993a21b (17 июля 2016 г.) Йоханнес Шинделин (dscho).
(слияние Junio ​​C Hamano - gitster - в commit 9db3979, 25 июля 2016 г.

fsck: необязательно показать более полезную информацию для неработающих ссылок

Когда сообщается о неработающих ссылках между commits/trees/blobs, иногда было бы полезно, если бы пользователю было сказано, как объект должен быть доступен.

С помощью новой опции --name-objects git-fsck попытается выполнить именно это:
назовите объекты таким образом, чтобы показать, как они достижимы.

Например, когда какой-либо reflog поврежден и отсутствует blob, которого не должно быть, пользователь может захотеть удалить соответствующую запись reflog.
Этот параметр помогает им найти эту запись: git fsck --name-objects теперь сообщит следующее:

broken link from    tree b5eb6ff...  (refs/[email protected]{<date>}~37:)
              to    blob ec5cf80...

Если эти неработающие ссылки не поступают из локального тайника, а удаленное репо, извлечение этих объектов пакета может затем решить ситуацию.
См. Также "Как восстановить Git объекты, поврежденные сбой жесткого диска?".

Ответ 2

Что мне удалось исправить, эта ошибка "сбойной ссылки" была ответом от sehe, указанным здесь, в ответ на вопрос о том, как исправить неспособность найти ошибку:

Git Ошибка: не удалось найти

Как сказал Адам, восстановите объект из другого репозитория/клона.

  • В "полной" базе данных git:

Git cat-file -p a47058d09b4ca436d65609758a9dba52235a75bd > tempfile

  1. и на принимающей стороне:

Git хэш-объект -w tempfile

Одним из важных дополнений было бы то, что между шагами 1 и 2 важно перенести файл из одного места в другое. По моему опыту, это не помогло переместить tempfile, используя git push и pull.

Ответ 3

run git gc --aggressive он должен устранить проблему.

После его проверки проверьте, что проблема исправлена ​​с помощью git fsck --all