Безопасная отмена ошибок: restore, reset, revert, reflog
Самая обнадёживающая новость во всём курсе: Git почти никогда по-настоящему не теряет вашу работу. Почти любую ошибку можно обратить, если знать, какой инструмент взять. В этом уроке мы соберём небольшой, понятный набор инструментов восстановления из четырёх штук, каждый в паре с «когда». git restor
restore — это «отменить то, что я редактирую сейчас». reset — это «верни меня во времени» (а --hard ещё и удаляет, так что будьте осторожны). revert — это «добавить страницу, которая отменяет старую страницу» — безопасно для команды. reflog — это камера наблюдения, которая помнит, куда перемещался HEAD, даже когда кажется, что вы потеряли работу.
- git restore
- Отбрасывает изменения в рабочей области (git restore <file>) или убирает файл из staging (git restore --staged <file>). Историю не трогает.
- git reset
- Перемещает HEAD (и ветку) к более раннему коммиту. --soft оставляет изменения в staging, --hard вдобавок отбрасывает изменения в рабочей области. Безопасно только для локальной истории.
- git revert
- Создаёт новый коммит, отменяющий изменение предыдущего коммита, не переписывая историю. Безопасный способ отменить то, что уже отправлено (push) и опубликовано.
- git reflog
- Локальный журнал всех мест, где побывал HEAD. Позволяет найти хеш коммита, который казался «потерянным» после reset, и восстановить его. Ваша страховочная сеть.
- Общая история
- Коммиты, которые уже были отправлены (push) и которые другие могли вытянуть (pull). Их переписывание ломает копию команды — поэтому с ними вы используете revert, а не reset --hard.