Что такое git reset и какие есть режимы reset (hard, soft)
Что проверяют
Держите ли вы в голове модель Git из трёх состояний и понимаете ли, что именно сброс не делает. Вопрос базовый, поэтому ценится точность: у Go-разработчика рабочий каталог обычно завален собранными бинарниками и сгенерированным кодом, и представление о том, чего сброс не тронет, проверяется на практике еженедельно.
Как отвечать
Состояний три: коммит, на который указывает ветка, индекс и рабочий каталог. git reset всегда двигает указатель ветки, а режим определяет, дотянется ли он до индекса и файлов.
git reset --soft <commit> # указатель; правки остаются подготовленными
git reset <commit> # mixed по умолчанию; индекс сброшен, файлы целы
git reset --hard <commit> # указатель, индекс и файлы приведены к коммитуМягкий режим удобен, когда принято отправлять на ревью одну аккуратную правку: сбросили на базовую точку, закоммитили заново одним сообщением с внятным текстом. Смешанный спасает, когда в индекс попал лишний артефакт сборки. Жёсткий возвращает отслеживаемые файлы в состояние коммита.
Ключевое ограничение лучше проговорить самому: жёсткий сброс работает только с тем, что Git отслеживает. Собранный бинарник, сгенерированные файлы и всё, что перечислено в правилах игнорирования, останется на диске, и для чистки нужна отдельная команда удаления неотслеживаемого.
Где спотыкаются
Ждут от жёсткого сброса чистого каталога и получают смесь старого и нового: код откатился, а артефакты сборки и сгенерированные файлы лежат как лежали. Дальше сборка ведёт себя необъяснимо, пока каталог не почистят явно.
Думают, что сброс уничтожает коммиты. Коммиты остаются в базе объектов и достижимы через журнал ссылок, пока не отработает сборка мусора. Обратное заблуждение опаснее: журнал не хранит незакоммиченные правки, и жёсткий сброс уносит их безвозвратно.
Сбрасывают ветку на удалённое состояние, не выкачав его. Локальная копия удалённой ветки могла устареть на несколько дней, и вместо синхронизации получается откат на чужой старый коммит. Сначала обновляют ссылки, потом сбрасываются на них.