git откатить изменения до или после коммита

При работе с git откатить изменения часто бывает необходимо. Поскольку ошибки совершаются постоянно и на разных этапах (до коммита, после и когда изменения уже отправлены на удаленный сервер) самая популярная система контроля версий для разработчиков позволяет легко отменять изменения.

 

 

Как известно в git-е существует три сущности:
  1. working tree — локальная среда в которой и ведется разработка
  2. staging (index) — этап, начинающийся после того как выполнена команда git add
  3. HEAD с порядковыми метками — закомиченные изменения

 

git откатить изменения

 

 

git откатить изменения

Если в рабочей директории были внесены нежелательные изменения восстановить состояние можно выполнив

git checkout — ИМЯ_ФАЙЛА

 

Это полезно если требуется в git откатить изменения в файле и или в нескольких файлах, которые еще не были добавлены в индекс и замоммичены.

 

Команда подтянет изменения из последнего сделанного коммита — содержимого HEAD. Локальные файлы будут замещены.

При этом те, изменения, которые уже были добавлены в индекс с git add в нем останутся.

 

Если коммиты не нужны — самый простой способ привести состояние локальной системы в соответствие состоянию удаленной:

git fetch origin

git reset —hard origin/master

 

Все данные в индексе и коммиты сбрасываются, состояние восстанавливается из указанной ветки, в примере master.

 

 

Самая частая практика при откате изменений git


Можно не трогать индекс и локальные файлы просто удаляя коммиты.

git reflog

reflog выведет все список всех действий

 

git reset HEAD@{index}

reset возвращает состояние по индексу, взятому из списка


 

 

Таким же образом можно отменить последний коммит

git reset HEAD~1

После знака тильды можно указать любое другое число; ~1 означает, что отменяется последний коммит, ~3, что последние три и т.д. Список всех коммитов и комментариев можно увидеть выполнив git log

 

 

Другой способ сделать то же

git reset —soft HEAD^

 

Ключ —soft означает, что данные удалены не будут, только коммит, если заменить его на —hard удалятся и данные

 

 

В удаленном репозитории откатить изменения можно таким же образом — убрав последние коммиты, затем выполнив git push с локальной системы на которой ведется разработка.

 

Конфликты при внесении изменений в git репозитории неизбежны — если какое-то действие не возможно система не даст его выполнить и будет выводить предупреждения. Они обычно весьма информативны и конфиликты в версиях разрешаются редактированием файлов вручную.

 

Также читайте про создание собственного git репозитория