git reset — Отмена изменений
Команда git reset перемещает HEAD (и, при необходимости, область подготовки и рабочую директорию) на другой коммит. Это основной инструмент для отмены коммитов.
Три режима
git reset --soft HEAD~1 # Отменить коммит, оставить изменения подготовленными
git reset --mixed HEAD~1 # Отменить коммит, снять подготовку (по умолчанию)
git reset --hard HEAD~1 # Отменить коммит, отбросить все изменения
Представьте их как уровни «отмены»:
| Режим | Коммит | Индекс | Рабочая дир. |
|---|---|---|---|
--soft | Отмена | Сохранён | Сохранена |
--mixed | Отмена | Отмена | Сохранена |
--hard | Отмена | Отмена | Отмена |
Синтаксис HEAD~1
HEAD~1— Один коммит до HEADHEAD~2— Два коммита до HEAD- Или используйте конкретный SHA:
git reset --soft abc1234
Попробуйте!
Попрактикуйтесь с режимами reset:
- Создайте два коммита:
echo "first" > file.txt && git add file.txt && git commit -m "First commit"echo "second" > file.txt && git add file.txt && git commit -m "Second commit"
- Мягкий сброс:
git reset --soft HEAD~1 - Проверьте статус:
git status— ваше изменение всё ещё подготовлено! - Закоммитьте заново:
git commit -m "Second commit (redo)" - Теперь жёсткий сброс:
git reset --hard HEAD~1 - Проверьте:
cat file.txt— показывает "first", второй коммит исчез
Предупреждение
git reset --hard разрушителен — он безвозвратно удаляет незафиксированные изменения. Всегда убедитесь, что эти изменения вам не нужны, прежде чем использовать его.
--soft и --mixed безопасны — они сохраняют вашу работу, лишь перемещая её между состояниями.