Как откатить коммиты в Git: подробное руководство
Для отката коммита в Git можно использовать команду git reset. В зависимости от того, какой тип отката нужен, используются разные опции этой команды. Рассмотрим наиболее распространенные варианты.
1. Откат последнего коммита
Если нужно откатить последний коммит, то можно использовать команду:
git reset HEAD^
HEAD обозначает текущую позицию в ветке, а символ ^ указывает на предыдущий коммит. Таким образом, команда reset HEAD^ отменяет последний коммит и возвращает файлы в состояние перед ним.
2. Откат на определенный коммит
Если нужно отменить коммит, который был сделан не последним, то нужно провести откат на конкретный коммит. Для этого нужно знать его хэш-код, который можно получить с помощью команды git log. Например, если нужно откатить на предпоследний коммит, то нужно выполнить следующую команду:
git reset <хэш-код предпоследнего коммита>
3. Откат коммита с сохранением изменений
Иногда бывает полезно сохранить внесенные изменения, но отменить только конкретный коммит. Для этого можно использовать опцию --soft. Например, если нужно отменить последний коммит, но сохранить его изменения, то нужно выполнить следующую команду:
git reset --soft HEAD^
4. Откат коммита с удалением изменений
Если нужно отменить коммит и удалить все изменения, которые он внес, то можно использовать опцию --hard. Например, если нужно вернуться на три коммита назад и удалить все изменения, то нужно выполнить следующую команду:
git reset --hard HEAD~3
Эта команда откатывает на три коммита назад и удаляет все изменения, которые были сделаны после этого коммита.
Пример кода:
$ git log --oneline
a3c3f2c Fourth commit
cc2691d Third commit
5bfe648 Second commit
10586b2 First commit
$ git reset HEAD^
Unstaged changes after reset:
M file.txt
$ git log --oneline
cc2691d Third commit
5bfe648 Second commit
10586b2 First commit
В данном примере мы сделали четыре коммита, а потом откатили последний с помощью команды git reset. После этого мы видим, что в ветке остались только три коммита, а изменения, которые были в последнем коммите, вернулись в рабочую директорию. В данном случае мы использовали опцию HEAD^ для отката на один коммит назад.