Как удалить "фатальный: свободный объект"?

Один из моих клонированных репозиториев получает это от git fsck

фатальный: свободный объект 40bda4e3b79c3d7bf598df31d9e68470f97a3f79 (хранится в .git/objects/40/bda4e3b79c3d7bf598df31d9e68470f97a3f79) поврежден

У меня есть еще одна копия, что fsck чисто.

Я попытался подключить каталог/подкаталоги, содержащие фатальный, и откладывая его. Проблема продолжается.

Мне действительно не нужен какой-либо конкретный файл, я просто хочу, чтобы репозиторий Оформить заказ. Что мне делать?

Примечание. Удаленный репозиторий размещен на github.

Ответы

Ответ 1

Легкий ответ: переместите старый репо и зажгите. Если у вас есть материал в старом репо, который вы хотите сохранить, есть способы их получить, но сначала получите хорошее репо.

Ответ 2

Во-первых, вы можете проверить файловую систему на наличие ошибок: fsck -y

Затем проверьте репозиторий git: git fsck

Ответ 3

Идея такова:

  • сначала удалите текущие записи git, которые находятся в вашем .git под вашим текущим проектом (обозначим его "проектом A" ).
  • Сделайте копию вашего текущего проекта, мы обозначим дубликат как "проект B".
  • Теперь cd в проект A и git клон и reset до последней фиксации.
  • Скопируйте все файлы из проекта B и замените их в проекте A.
  • Теперь cd в проект A и используйте git status, чтобы увидеть статус проекта A. Это должно быть так, как если бы коррупция никогда не происходила.

Короче говоря, сделайте копию, чтобы зарезервировать текущую рабочую область, и объедините ее со свежим клоном, заменив файлы, а затем обработайте свои изменения как обычно.

Здесь он в действии:

  • Сначала я вижу, что у меня есть коррупция (это потому, что я заставил мою виртуальную машину отключиться вчера: P):

    ✘ domicor @ubuntu  ~/dotfiles   мастер ●  git статус ошибка: объектный файл .git/objects/cd/593f6db1d5050406e15b9c80d215fd48db39f4 пуст ошибка: объектный файл .git/objects/cd/593f6db1d5050406e15b9c80d215fd48db39f4 пуст фатальный: свободный объект cd593f6db1d5050406e15b9c80d215fd48db39f4 (хранится в .git/objects/cd/593f6db1d5050406e15b9c80d215fd48db39f4) поврежден corrupted

  • Сделайте копию моей папки dotfiles и теперь удалите папку .git.

    $cd ~/dotfiles $ rm -rf.git

    dotfiles

  • Затем заново создайте репозиторий git.

    $git init

  • Добавить пульт.

    $git удаленный добавочный источник git @git.oschina.net: domicor/dotfiles.git

  • Извлечь из пульта дистанционного управления.

    $git fetch

    Здесь показан снимок вышеприведенных команд: rm-clone-fetch

  • Теперь reset HEAD.

    $git reset - грубое происхождение/мастер

    Это снимок: reset

    Обратите внимание, что сразу после того, как я вытащил из удаленного, я выпустил команду git status, чтобы проверить статус моего репо. Вы можете видеть, что все файлы не отслеживаются. И первая строка запроса командной строки оранжевая от моей команды git init до git reset, указывающая, что при инициализации моего репо, git обнаруженных файлов и после reset все файлы восстанавливаются до состояния HEAD, таким образом, приглашение зеленого цвета.

  • Установите ветвь восходящего потока:

    $git branch --set-upstream-to = origin/master master

  • Теперь скопируйте файлы из папки резервного копирования (для меня это dotfiles (copy)) вручную или через командную строку для замены файлов в папке dotfiles. Проверьте статус и должны быть изменения, как и мой снимок экрана:

    final

  • Теперь вы можете git diff your-filename проверить правильность применения ваших изменений, и теперь вы можете добавлять файлы и фиксировать их.\О/

Чтобы понять это, VCS git просто записывает ваши изменения. Когда VCS поврежден, ваши файлы по-прежнему безопасны. Они все еще там, когда вы их оставили. Таким образом, вы создаете резервную копию своих файлов и восстанавливаете записи git из других источников, а git можете сравнивать копию восстановления с текущим статусом файла и иметь представление о том, что изменилось так же, как и до коррупции. И приветствия\o/

Ответ 4

Сделайте git checkout в другую ветку, вы получите список измененных файлов, просто скопируйте их и вставьте в ветвь. Если вы это сделаете, проблема будет решена, в следующий раз, когда вы сделаете некоторые изменения, git status должен работать.

Ответ 5

Я столкнулся с этой проблемой, и этот простой трюк решил проблему.

Шаг 1

Предположим, вы столкнулись с этой проблемой в папке с именем "my-project" с веткой "my-new-feature", клонируйте репозиторий в новую папку с именем "my-project-dummy" и извлеките в "my-new-feature"

Шаг 2

Удалите папку ".git" в папке "my-project" и скопируйте папку ".git" из папки "my-project-dummy" в папку "my-project"

Тадааа, тебе пора идти.