Что делает команда git reset —hard?

«Что делает команда git reset —hard?» — вопрос из категории Devops, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

git reset --hard <commit> — это команда, которая принудительно сбрасывает состояние репозитория до указанного коммита. Она затрагивает три ключевые области Git:

  1. HEAD (указатель ветки): Перемещает указатель текущей ветки на <commit>.
  2. Индекс (Staging Area): Полностью очищает индекс и приводит его в точное соответствие с состоянием <commit>.
  3. Рабочая директория (Working Directory): Перезаписывает все файлы в рабочей директории, чтобы они соответствовали состоянию <commit>. Все незакоммиченные изменения будут безвозвратно утеряны.

Пример:

Предположим, у вас есть коммиты A-B-C (где C — последний) и локальные изменения в файле main.py.

# Сбросить состояние до коммита B
git reset --hard HEAD~1

Результат:

  • Последний коммит C удален из истории ветки.
  • Все изменения, внесенные в коммите C, исчезли из файлов.
  • Все локальные, незакоммиченные изменения в main.py также удалены.

⚠️ Предостережение: Используйте эту команду с особой осторожностью. Это один из немногих случаев в Git, когда можно потерять данные. Если вы случайно сбросили коммиты, их еще можно попытаться восстановить с помощью git reflog.