Git для новичков: отмена изменений и возврат к старым версиям

Изучение системы контроля версий Git – важный этап для любого разработчика. Этот урок посвящен отмене действий и возврату к предыдущим версиям проекта.

Создание тестового проекта

Для демонстрации создадим простой проект:

  1. Создадим файл index.html с базовой HTML-структурой.
  2. Создадим папку css и внутри неё файл style.css со следующим стилем: background: red;.
  3. Инициализируем Git репозиторий: git init.
  4. Добавим файлы в индекс: git add ..
  5. Зафиксируем изменения: git commit -m "Добавлены index.html и style.css".

Проверим историю коммитов командой git log —oneline. На данном этапе история будет простой.

Для дальнейшей демонстрации изменим содержимое index.html, добавив новый заголовок «New Title». Затем добавим и зафиксируем изменения: git add index.html, git commit -m "Изменен заголовок в index.html". Снова проверим историю коммитов с помощью git log —oneline.

Просмотр и возврат к предыдущим версиям

Команда git checkout позволяет просмотреть проект на момент определенного коммита. Например, для просмотра проекта на момент первого коммита (добавления файлов index.html и style.css) скопируем его идентификатор (hash) и выполним команду: git checkout <hash_первого_коммита>. Заголовок страницы в браузере отобразится как «Document», так как изменения заголовка были внесены в следующем коммите.

Важно помнить: git checkout предназначен только для просмотра. Изменения, внесенные в этой версии, не сохранятся. Для возврата к последней версии проекта выполним команду: git checkout master. Для возврата к конкретному коммиту можно использовать git checkout <hash_коммита> и затем зафиксировать изменения командой git commit -m "Возврат к коммиту <hash_коммита>".

Отмена коммитов

Рассмотрим команды для отмены коммитов:

  • git revert <hash_коммита>: Отменяет действия конкретного коммита, создавая при этом новый коммит. Это предпочтительный метод, так как он оставляет полную историю изменений. Выполнив эту команду, вас перенаправит в редактор vim, где необходимо нажать Esc, затем :wq и Enter для сохранения и выхода.
  • git reset <hash_коммита>: Удаляет коммиты после указанного хэша. Использовать с осторожностью! git reset —hard <hash_коммита> удаляет коммиты и возвращает файлы к состоянию указанного коммита.

git reset – более радикальная команда. Она удаляет коммиты, но файлы остаются изменёнными. В случае использования git reset, а затем просмотра истории коммитов (git log —oneline), мы увидим, что коммит отменён, но файлы сохранили изменения из удалённого коммита. Это может привести к путанице. Для полного удаления коммита с возвратом файлов к предыдущему состоянию необходимо использовать git reset —hard.

В этом уроке мы рассмотрели несколько команд Git для отмены действий и возврата к предыдущим версиям проекта: git checkout, git revert и git reset (включая вариант —hard). Правильное использование этих команд позволяет эффективно управлять историей проекта и исправлять ошибки. Важно понимать различия между этими командами, чтобы избежать непредвиденных последствий.

Что будем искать? Например,программа