Отменить 'git push -f' с машины, у которой нет клонированной истории

Итак, предыстория. Мой жесткий диск умер на машине A. Почти вся моя работа уже была перенесена на GitHub, и все было на этом фронте, кроме одного хранилища. Итак, поняв это, я узнал: "Эй, круто, я на самом деле только что отправил tar-файл с последними изменениями в Guy Guyerson". Итак, я получаю файл tar, а затем делаю что-то глупое / показываю, какой я нуб GitHub. Вместо того, чтобы клонировать репозиторий, затем добавить обновленные файлы, а затем нажать кнопку, я думаю: я должен иметь возможность просто отправить эти файлы, нет проблем. Я ввожу init, добавляю пульт, а затем нажимаю, но это не работает... потому что слияния странные. Я знаю, что слияния плохие, поэтому я решил принудительно обновить эти файлы и нажать -f. Однако, поскольку это новый каталог.git, push перезаписывает все, и я теряю всю историю коммитов, и все файлы, которых не было в tarball, ушли.

Можно ли как-то вернуться к этому, учитывая, что текущая локальная версия не имеет памяти о каждом существующем коммите? У меня есть начало хэша, которое он перезаписал, но у пульта сейчас нет памяти об этом коммите.

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

Спасибо Зак

1 ответ

Онлайн-версия GitHub ведет учет этих старых коммитов, я просто не знал, как получить к ним доступ. Для будущих читателей: если у вас есть идентификатор фиксации, который вы случайно перезаписали, вы можете получить к нему доступ следующим образом:

https://github.com/userName/repoName/tree/commitNum

Оттуда вы можете использовать раскрывающийся список Tree/Branch для создания новой ветви из этого коммита. Затем его можно клонировать в локальный каталог, а затем можно объединить и т. Д. Оттуда.

Другие вопросы по тегам