
Как применять git reset и git revert эффективно: отменяем коммиты в Git
Статья
Время чтения
6 минут
При написании кода всегда есть риск сделать ошибку. Чтобы всегда иметь возможность быстро исправить любую оплошность, рекомендуем взять на вооружение Git — специальную программу для отслеживания истории версий кода проекта. Она позволяет в любой момент отменить изменения через ввод команд git reset и git revert. Чтобы разобраться, в каких ситуациях их применение будет наиболее эффективно, читайте эту статью.
Как откатить последний коммит в Git
Для отмены изменений чаще всего применяется команда git reset. Она инициирует перемещение указателя HEAD на заданное число коммитов назад в истории. В общем виде ее структура выглядит так:
git reset [--<режим>] [<коммит>]
Git reset можно применять в трех непосредственно связанных между собой зонах системы контроля версий: в самом пространстве работы с кодом, в индексе и в хранилище кода — репозитории. Если посмотреть на их взаимосвязь чуть детальнее, мы обнаружим, что:
сначала идет редактура в рабочем пространстве;
затем через применение команды git add изменения переносятся в Git Index — то есть в промежуточный слой между репозиторием и папкой, в которой ведется работа;
в итоге добавленные файлы фиксируются в хранилище файлов при помощи git commit.

Откат изменений с git reset
Чтобы отменить изменения в упомянутых выше зонах, git reset применяется с использованием с разными опциями: soft, mixed и hard.
Опция soft
Добавление опции soft передвигает указатель HEAD на заданное число коммитов назад. В индексе и рабочей директории ничего не меняется.
git reset --soft [<коммит>]
А что на практике? Представьте, что вы создали в директории файл new-file.txt. и индексировали его:
git add new-file.txt
После этого закоммитили с ошибкой:
git commit -m "wrong commit"
И решили его отменить при помощи git reset с опцией soft:
git reset --soft HEAD~1
Удостоверились в отмене коммита с помощью:
git status
Увидели, что изменения в файле test.txt вернулись в индекс:
Changes to be committed:
(use "git restore --staged
..." to unstage) new file: new-file.txt
И сделали верный коммит:
git commit -m "correct commit"
В итоге история изменений репозитория осталась чистой, а проект был защищен от возможной путаницы в дальнейшей работе:

Опция mixed
Опция mixed применяется git reset по умолчанию. Она отменяет последние изменения в коммите и индексе, а рабочую директорию не редактирует.
Строится команда с опцией mixed следующим образом:
git reset –mixed [<коммит>]
А что на практике? Ситуация: вы сделали коммит с изменением, которое теперь хотите отменить. Поэтому вам нужно сбросить индекс, чтобы потом внести верные изменения.
Например, сейчас есть коммит, в котором вы хотите отменить добавление файла something.txt:
git add main_file.txt git add updates.txt git add something.txt git commit
Действуйте следующим образом. Внесите команду git reset без дополнительных элементов, ведь опция mixed используется по дефолту:
git reset HEAD~1
Вы увидите, что указатель переместился на один коммит назад, что отменило его и возвратило проиндексированные изменения в предыдущее состояние. Теперь добавьте только корректные файлы:
git add main_file.txt
git add updates.txt
И завершите действия:
git commit -m "Added files 1 and 2, excluding file 3"
Опция hard
Чтобы удалить все изменения после определенного коммита из всех рабочих зон Git, используется опция hard.
А что на практике? Представим, что вы закоммитили ненужный файл:
git add another_new_file.txt
git commit -m "Added incorrect file"
Теперь вам нужно удалить another_new_file.txt:
git reset --hard HEAD~1
В итоге указанный файл удалится из рабочего каталога вместе с ненужным изменением.
Отмена изменений с командой git revert
Кроме git reset в Git есть и другая команда для откатки — git revert. И если git reset производит отмену через перенос указателя HEAD к нужному коммиту, то git revert производит новый коммит без удаления предыдущих коммитов.
А что на практике? Итак, вы сделали ненужный коммит. Чтобы определить его идентификатор для отмены, введите git log:
git log
commit 2e3c670bfe46a5d7c5 Author: Ваше Имя <ваш.email@example.com> Date: Sat Sep 26 15:32:46 2020 -0400 Ваш коммит
Далее вбейте git revert с идентификатором удаляемого изменения:
$ git revert 2e3c670bfe46a5d7c5
В итоге у вас будет новый коммит, который откатит изменения по указанному идентификатору, а еще откроет редактор. В нем можно указать причину отмены.
При этом важно учесть, что при использовании git revert могут возникать конфликты слияния. Возможно, их придется править вручную.
Облачные ресурсы в Evolution free tier бесплатно и навсегда
Виртуальная машина, хранилище данных и 4 000 бонусных рублей при регистрации
ПопробоватьДополнительные способы откатки в Git
Кроме команд, о которым подробно рассказали выше, в Git можно использовать и другие методы откатки закоммиченного.
Использование команды git checkout для отмены изменений
Изначально задумка команды git checkout заключалась в реализации возможности создавать ветки и осуществлять переключение между ними в Git. Однако ее тоже можно применять для отмены изменений в файлах, будь то один файл или несколько файлов одновременно.
А что на практике? Вы сделали коммит в файл test.sh, но потом поняли, что он вас не устраивает и нужно вернуться к предыдущему коммиту файла. Тогда используйте git checkout:
git checkout HEAD -- test.sh
git checkout HEAD -- test.sh
Это вернет состояние файла к тому, которое у него было до внесения ненужного коммита.
Если же вы хотите откатиться не к предыдущему, а к более раннему конкретному коммиту, то сперва нужно ввести команду git log, чтобы определить хэш-сумму требуемого коммита — она указывается в выдаче после слова commit. И далее вбить git checkout:
git checkout [<идентификатор коммита>] -- script.sh
Как отменить слияние коммитов
Слияние в Git — это объединение веток с изменениями в одну. С его помощью разработчики могут удобно работать в команде, интегрируя полезные изменения из других веток в свои.
Чтобы отменить слияние веток, нужно:
Проверить статус слияния через ввод команды git status, чтобы обнаружить признаки того, что процесс слияния продолжается.
Выполнить команду git merge --abort.
Нажать Enter.
В ответ на ввод команды git merge --abort Git прервет слияние и отобразит об этом сообщение. После чего можно будет снова ввести git status, чтобы убедиться в успехе операции.
Как поступить, если отменено слишком много изменений
В том случае, если откатка произошла слишком далеко, все изменения можно вернуть на место, используя журнал действий Git и команду git reflog. Она продемонстрирует произведенные действия с указанием индексов, которые можно использовать для отмены лишних изменений.
А что на практике? Чтобы увидеть список произведенных действий, введите:
git reflog
Обнаружив в выдаче нужный индекс, впишите:
git reset --hard HEAD@{индекс}
И наблюдайте примерно такую картину:

Изменение и исправление коммитов в истории
Бывает, нужно не только отменить коммит, а внести правки в саму историю коммитов в Git. Это может пригодится в том случае, если коммиты требуется правильно сгруппировать или изменить их порядок.
Как отредактировать текст последнего коммита
Изменить последний коммит в Git можно с помощью команды git commit --amend. Она соединяет изменения в Git Index с предыдущим коммитом, но не создает новый. А еще позволяет редактировать комментарии к предыдущему коммиту, не изменяя в нем код.

Как слить коммиты в один
Для слияния коммитов в Git пригодится команда git rebase -i. Чтобы ее использовать, сперва нужно определить коммиты, которые нужно объединить, при помощи команды git log. А потом ввести:
git rebase -i HEAD~3
Это отобразит три последних коммита в окне текстового редактора. Например:
pick hfdjhj23 что-то исправляем
pick 5556f9n классное изменение pick egrhth1 последнее изменение
И далее нужно заменить команды pick двух последних комментов на squash:
pick hfdjhj23 что-то исправляем
squash 4133a5f классное изменение squash e0ca1b1 последнее изменение
После этого сохраните то, что у вас получилось, прокомментировать этот коммит и проверить, что все корректно при помощи git log.
Что в итоге
Git — это мощный инструмент для управления версиями, который пригодится любому разработчику. Он дает возможность просматривать и отслеживать модификации кода. А еще значительно упрощает совместную работу, ведь с ним не нужно бояться, что какие-то данные или чужой код будут безвозвратно утеряны.
В начале знакомства с Git важно научиться использовать команды git reset и git revert — они обеспечивают простую отмену выполненных изменений в коммите или ветке кода.

Также, чтобы с удобством работать с Git-репозиториями, рекомендуем внедрить в работу GitLab — веб-приложение и систему управления репозиториями программного кода. Кстати, на Маркетплейсе Cloud.ru вы можете скачать образ виртуальной машины, с помощью которого можно за несколько кликов настроить профиль в GitLab с готовыми CI/CD-процессами для создания приложений.
Вам может понравиться


VDI для бизнеса: что это такое и как работает

3 ключевые ошибки управления доступом в облаке: находим и устраняем

Главные новости GoCloud и последние обновления в облаке — дайджест Cloud.ru

Гибридное облако: 5 эффективных сценариев применения

Dogfooding as a Service: как пополнять бэклог идей по продуктам без особых усилий

Приглашаем на IT-конференцию GoCloud 10 апреля 2025

Нереляционная база данных NoSQL — что это и в чем ее особенности

Cloud.ru и AI: как мы поддержали выход Wildberries на новый рынок

Какие новости за февраль и март — дайджест Cloud.ru

INSERT INTO SQL: примеры добавления данных в таблицу

Node.js на Ubuntu 24.04: как установить и настроить

Что такое HTTPS и как он защищает ваши данные

REST API: что это и как использовать

Как создать Telegram Web App: инструкция по разработке Mini App

Как привлекать клиентов и зарабатывать до 20% на рекомендациях: готовые инструменты

Коды ошибок HTTP: что нужно знать о серверных и клиентских ошибках

Лучшие дистрибутивы Linux: выбор популярных версий

Система управления базами данных (СУБД): что это такое и зачем нужна

Все о Telegram-ботах: какие бывают и как их сделать самому

VPS/VDS: что это такое и чем они отличаются? Полное руководство

Что такое NVMe и как он отличается от SATA SSD и M.2

Микросервисная архитектура: чем она хороша и кому нужна

Как развернуть WordPress в облаке: инструкция для новичков

Применение LLM в бизнесе: опыт лидеров и роль облачного провайдера

Центры обработки данных (ЦОД): что это и как они работают

Какие новости за январь — дайджест Cloud.ru

Команда grep в Linux: как искать строки и шаблоны

PostgreSQL: что это за СУБД и чем она хороша

Что может chmod: как управлять доступами к файлам и папкам в Linux

Как узнать IP-адрес в Linux через командную строку

Как узнать IP-адрес своего компьютера

Система MySQL: что это и для чего нужна

Команды kill и killall в Linux: как завершить ненужные процессы

Работа с файлами в Linux: их создание и организация через терминал

Стандарт Tier III для дата-центра: что значит и почему это круто

Какие новости за декабрь и начало января — дайджест Cloud.ru

Что такое FTP-протокол и как настроить FTP сервер

Белые и серые IP, динамические и статические - в чем различие

Как защищать сайты и приложения в облаке от DDoS-атак

Какие новости за ноябрь — дайджест Cloud.ru

BAT-файлы: что это такое, зачем они нужны и как их создавать

Гайд по протоколу HTTP: расшифровка, структура и механизм работы

Межсетевой экран, firewall и брандмауэр: что это, в чем между ними разница и зачем они нужны

Kubernetes на Cloud.ru Evolution: возможности и преимущества

Какие новости за октябрь — дайджест Cloud.ru

Как создать сетевую архитектуру для размещения межсетевых экранов на платформе Облако VMware

Рассказать про технологии лампово, или Как мы провели конференцию GoCloud Tech для инженеров и...

Какие новости за сентябрь — дайджест Cloud.ru

Высокоресурсные вычисления: роль суперкомпьютеров в жизни и бизнесе

Реферальная программа Cloud.ru: как устроена и как на ней зарабатывать

Сетевая модель OSI: что это такое и зачем она нужна

Какие новости за август — дайджест Cloud.ru

Сетевые протоколы передачи данных — что это такое и какие бывают

Какие новости за июль — дайджест Cloud.ru

Как новые возможности в юридических документах Cloud.ru облегчают работу с договорами и не только

Какие новости за июнь — дайджест Cloud.ru

Как обновления VMware Cloud Director облегчают управление и делают работу с инфраструктурой в ...

Как мы рассчитывали «Панораму российского IT-рынка» за 2022 год

Как снизить риски утечки данных и санкций госрегуляторов: 152-ФЗ в Cloud.ru

Бесплатный курс по работе с Cloud.ru Advanced: рассказываем, в чем польза, кому подойдет и как...

Как модель Anything as a Service упрощает IT-процессы

Снижение рисков на производстве: AI-сервис распознает нарушения ношения СИЗ

Kandinsky 2.1: новый уровень в генерации изображений по текстовому описанию

Облачные сервисы для стартапов: как пройти путь от идеи до цифрового продукта и не разориться

Создать пользователя, настроить 2FA, связаться с поддержкой — новые возможности личного кабине...

VDI: что это, как работает и в чем выгода для бизнеса

Как защитить облачную инфраструктуру — рассказываем на примере межсетевого экрана нового покол...

Как начать использовать AI/ML на практике

Бессерверные вычисления: что это за технология и кому она нужна

Чек-лист: как обеспечить безопасность облачной инфраструктуры

Искусственный интеллект

Что такое IaaS?

Что такое PaaS

Machine Learning

Data Science

Машинное обучение без учителя

Классическое машинное обучение

Нейронные сети

Глубокое обучение

Защита персональных данных: как легче соблюдать закон с Cloud.ru и сохранять спокойствие

Как сохранить IT-инфраструктуру и бизнес: руководство к действию

Машинное обучение и Big Data в кибербезопасности

Ответы на актуальные вопросы

Что такое DDoS-атаки, чем они опасны и как от них защититься

Аудит информационной безопасности: что это, зачем и когда его проводить

Межсетевые экраны: UTM, NGFW-системы, NTA, NDR

Обзор межсетевых экранов, систем IPS и IDS

PostgreSQL vs MySQL: какая система подходит вашему бизнесу

Основы резервного копирования

Специальное предложение «180 дней тестового периода резервного копирования» для всех клиентов
Платформа SberCloud Advanced теперь обеспечивает максимальный уровень защиты персональных данных

Что такое объектное хранилище S3 и как его используют

Customer Enablement: как SberCloud работает с клиентами, чтобы сделать миграцию в облако комфо...

Сеть доставки контента CDN: новые функциональные возможности и преимущества

Объясняем на кейсах: польза CDN для бизнеса

Новая Windows Server 2022 в облаке SberCloud — новые возможности клиентов

Запуск нового сервиса Managed OpenShift в облачной среде SberCloud

Как работает технология DNS

SberCloud Advanced запустила третью ресурсную зону доступности для комфортной работы клиентов

PostGIS в PostgreSQL — как можно использовать

GitLab для начинающих: как и для чего используется

Краткий обзор методологии CI/CD: принципы, этапы, плюсы и минусы

Персональные данные: правильно обрабатываем и храним

Кто и зачем использует облачные модели IaaS и PaaS

152-ФЗ в облаке: хранение персональных данных в облаке

Как работает CDN (Content Delivery Network)?

Service Level Agreement (SLA): все о соглашении об уровне сервиса

Что такое «интернет поведения» (IoB)?

Чек-лист: 6 шагов для успешной миграции в облако

Машинное обучение: просто о сложном

Профессия DevOps-инженер: кто это и чем занимается

Гайд по Kubernetes. Эпизод I: k8s для неразработчиков

Публичные, частные и гибридные облака: в чем разница?
