Как восстановить фиксацию после жесткого сброса до предыдущей фиксации?

#git

Вопрос:

На следующем рисунке показана работа жесткого сброса. Как получить file.txt (v3)? Есть ли способ продвинуть голову вперед?

введите описание изображения здесь

Комментарии:

1. Фиксация (здесь выше 38eb946 ) больше не является частью ветви, но она все еще существует в репозитории. Вы можете воссоздать там ветвь или сбросить текущую на ней.

Ответ №1:

Вы должны восстановить его из рефлога:

 git reflog --all  # Write down the commit hash you need to recover  git cherry-pick lt;commit-hash-to-recovergt;  

Комментарии:

1. Всегда ли сохраняется оплавление? Я имею в виду, что он никогда не теряет информацию? Таким образом, фиксация жесткого сброса всегда может быть восстановлена?

2. Может быть восстановлен до сборки мусора git.

3. @переменная: повторные записи сохраняются до тех пор, пока они поддерживаются. Это настраивается: как то, сохраняются ли вообще записи в журнале, так и если да, то как долго длится запись в журнале. По умолчанию для пользовательских (не пустых) репозиториев записи будут храниться не менее 30 дней. Тем не менее, не отбрасывайте ссылки, которые вы намерены сохранить: не используйте git reset --hard их для перемещения по истории; это не то, для чего они предназначены.

4. @torek — требуется ли сброс, выполненный в смешанном или мягком режиме, также для восстановления журнала?

5. @переменная: на самом деле проблема не в --hard выборе, проблема в перемещении. Но вы бы не стали перемещаться со смешанным или мягким сбросом, просто чтобы посмотреть на фиксацию в первую очередь, так как это не обновляет ваши файлы рабочего дерева. Общая идея здесь заключается в том, что если вы хотите просмотреть историческую фиксацию, используйте для этого проверку с отсоединенной ГОЛОВКОЙ ( git switch --detach lt;commitgt; например).