Хак с Git #2: Восстановление потерянных файлов через git reflog

Одним из недостатков rebase является то, что при неумелом разрешении конфликтов (особенно в бинарных файлах), можно потерять нужную версию файла. Ещё один хороший способ потерять коммит, это удалить ветку, в которой он находится.

Do not panic!

В случае git, «потерять» — это не совсем верное слово. Git хранит последние коммиты, которые больше не находятся в истории, но ещё могут быть туда возвращены.

И так, предположим, мы сделали что-то не так и «потеряли» файл или целый коммит.

Git reflog

Для начала выводим список всех совершённых коммитов (включая те, что уже не являются частью истории какой-либо из существующих веток, и те, что Git делал в тайне от нас)

Теперь нам нужно выбрать коммит, в котором содержатся нужные данные. Тот коммит, который буду восстанавливать я, выделен на скриншоте.

Screenshot - 09072014 - 03:38:47 AM

Решаем, что мы хотим сделать: восстановить только какой-либо файл или восстановить весь коммит.

Не забудьте переключиться на ту ветку, в которую вы хотите восстановить данные.

Восстановление файла

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

Или так

Восстановление коммита

Создадим копию нужного коммита и добавим в рабочую ветку.

Или так

 

И так, сегодня мы научились ещё одной «магической» команде, которая может спасти часы нашей работы и сберечь наши нервы.

Поделиться

Оставить ответ