Git повредил главную ветку

Git повредил главную ветку

Я открываю свой репозиторий Git с помощью gitExtensions на Windows 7 для проекта Visual Studio. Он внезапно оказывается пустым. Репозиторий существует, но все мои коммиты исчезли.

Я использую графический интерфейс и, по-моему, открываю его впервые с момента обновления.

Я не уверен, что делать, чтобы вернуть свои коммиты.

Когда я печатаю

git log 

я получаю

фатально: плохая версия по умолчанию 'HEAD'

Обновлять
Посмотрев наhttps://stackoverflow.com/questions/1545407/восстановление-сломанного-git-репозиторияЯ пытался

гит fsck

он вернул:

ошибка: Неверный HEAD
, фатальная ошибка: свободный объект 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31 (хранится в .git/obj ects/36/b7d9e1ca496bcb864c0b9c8671fcec97fbda31) поврежден

Возвраты при фиксации:

ошибка: невозможно разрешить ссылку HEAD: нет такого файла или каталога
фатальная: невозможно заблокировать ссылку HEAD

и регистрация возвратов главной ветви

$ git log master предупреждение: игнорируются сломанные ссылки refs/heads/master. предупреждение: игнорируются сломанные ссылки refs/heads/master. фатальная ошибка: неоднозначный аргумент 'master': неизвестная ревизия или путь не в рабочем дереве. Используйте '--' для разделения путей от ревизий

Я просто продолжу вставлять то, что может быть релевантным.

$ git reflog master
предупреждение: игнорируются сломанные ссылки refs/heads/master.
предупреждение: игнорируются сломанные ссылки refs/heads/master.
фатальная ошибка: неоднозначный аргумент 'master': неизвестная ревизия или путь не в рабочем дереве.
Используйте '--' для разделения путей от ревизий

Еще одна, возможно, полезная информация: каждый раз, когда я удаляю поврежденный файл, другой занимает его место. Я начинаю думать, что это как-то связано с тем, что ветка master указывает на что-то неправильное или что-то в этом роде. потому что я предполагаю, что head указывает на master.

День спустя:
Итак, я привлек к этому своего приятеля, он смог просмотреть логи и сказал, что хэши в журналах не соответствуют объектам в папке. Он попытался сбросить главную ветку на логи или что-то в этом роде, я немного запутался. Надеюсь, это поможет

решение1

Репозиторий существует, но все мои коммиты исчезли.

Что именно вы имеете в виду? Рабочее дерево все еще там? Существует .git/? Есть ли в нем какие-либо файлы?

Сообщения, которые вы разместили, говорят о том, что файл .git/HEADне существует. Он определяет ожидаемое состояние рабочего дерева (то, что вы извлекли). Если этот файл исчез, git не знает, где вы были.

Вы можете попробовать создать файл самостоятельно, со следующим содержимым: ref: refs/heads/master

Если вы были на другой ветке, просто замените "master" на имя ветки. Если бы вы не были на ветке, это было бы сложнее.

.git/logs/HEADзаписывает прошлые состояния HEAD, с более поздними строками внизу. Этот пример строки показывает проверку: 25f2a6099fb5f9f2192a510c42f704f9fc4bcecb 65abb1a3dc102e2498860f01fb179cda4c51decb Rainer Blome <[email protected]> 1346938344 +0200 checkout: moving from master to MySuperBranch

SHA1 в начале относятся к коммитам. Вы должны иметь возможность найти их в журнале веток, например .git/logs/refs/heads/master.

Вывод git reflog, который вы дали, похоже, refs/heads/masterтоже отсутствует. Его единственным содержимым должен быть SHA1 последнего коммита на нем (и новая строка). Вы можете найти последний SHA1 в конце журнала ветки, например .git/logs/refs/heads/master.

решение2

Если .git/HEAD существует и его содержимое, ref: refs/heads/masterто проверяется файл refs/heads/master, он должен содержать sha1 последнего коммита.

Если этот файл поврежден и содержит символы NULL, отредактируйте этот файл и поместите sha1 последнего коммита .git/logs/HEADили того, который предшествовал последнему коммиту.

Тогда сделайgit reset --hard 'sha1 of the commit that you selected'

решение3

Похоже, ваш репозиторий был поврежден. Проще всего восстановить репозиторий из резервной копии или повторно клонировать репозиторий из оригинального источника (предполагая, что у вас не было кучи работы в репозитории).

Если восстановление/клонирование невозможны, я бы рекомендовал прочитатьПрофессиональный Git(бесплатная онлайн-книга илибумажная версия). Вся книга очень информативна, но особенно взгляните на последнюю главу, чтобы понять, как Git работает изнутри. Как только вы поймете, как работает Git, взгляните на Linus'инструкции по восстановлению поврежденных объектов.

решение4

Побродив некоторое время по просторам Интернета, я наконец нашел это, и это сработало.

git fetch origin
git reset --hard origin/master

Связанный контент