Как вернуться к старому коммиту в git, чтобы посмотреть код?
Хочу откатиться на старый коммит и посмотреть, как код выглядел раньше. Потом, может, вернусь обратно. Как это сделать и что за страшное сообщение про «detached HEAD» появляется?
2 ответа
Есть два сценария: посмотреть старый код и откатить ветку на старый коммит. Это разные вещи.
Просто посмотреть (не меняя историю). Найди хеш коммита через git log --oneline, затем:
git checkout a1b2c3d
Теперь рабочая папка выглядит как в том коммите. Git предупредит про «detached HEAD» — это значит, что ты не на ветке, а «висишь» на конкретном коммите. Это нормально для просмотра. Чтобы вернуться обратно на свою ветку:
git switch -
или git checkout main.
Откатить ветку насовсем к старому коммиту (если коммиты после него не нужны):
git reset --hard a1b2c3d
Осторожно: это сотрёт все коммиты после a1b2c3d.
Безопасный вариант для общей ветки — сделать обратный коммит:
git revert a1b2c3d
Частая ошибка: запаниковать от «detached HEAD» и начать там коммитить, а потом «потерять» эти коммиты при переключении. Если что-то наработал в detached-состоянии — сразу создай ветку: git switch -c new-branch, иначе коммиты могут потеряться.
Расшифровка «detached HEAD»: обычно HEAD указывает на ветку, а ветка — на коммит. Когда ты делаешь checkout по хешу, HEAD указывает прямо на коммит, минуя ветку — отсюда «отсоединённая голова».
Это не ошибка, а режим «только посмотреть». Главное — не коммитить там без создания ветки. Вернуться к работе: git switch - (на предыдущую ветку).