Git имеет огромное количество инструментов по исправлению ошибок, возникающих во время работы. Для возврата репозитория к состоянию предыдущего коммита («откатить» последние изменения) или удаления коммитов, можно воспользоваться командой git-revert. Эта команда создает новый коммит (называемый обратным), отменяющий изменения, внесенные в старом коммите.
Например, если известно, что последний коммит внес в программу сбой и его нужно убрать, достаточно выполнить следующую команду
git revert HEAD
В процессе выполнения команды откроется редактор, в котором можно будет отредактировать описание нового коммита.
Если коммит, нуждающийся в откате, не последний, достаточно просто указать в команде его хэш, например:
git revert 0dd263
Если нужно обратить (сделать revert) несколько коммитов, можно указать GIT промежуток истории, например:
git revert 0dd263..HEAD
В процессе выполнения этой команды будут сделаны обратные коммиты, начиная с коммита 0dd263, не включая его и до крайнего (на который указывает HEAD). Например, если в этот промежуток попало два коммита, будут сделаны два обратных коммита, поочередно отменяющие изменения каждого из исходных. Как и в предыдущих случаях, для каждого из коммитов будет открыт редактор, в котором можно будет изменить текст коммита (commit message).
Команда git revert имеет набор опций, расширяющих ее возможности, например —no-commit или если кратко, то -n. Эта опция останавливает GIT на этапе добавления изменения в индекс, после чего автор может сделать коммит самостоятельно. Это может быть полезным в случае, если делается revert нескольких коммитов и мы хотим поместить весь фикс в один обратный коммит, а не в несколько. То есть переписав предыдущий пример следующим образом, будет создан один обратный коммит, а не 2:
git revert --no-commit 0dd263..HEAD
git commit -m "revert last 2 features"
С другими опциями этой команды вы можете ознакомиться на этой страничке документации. Команда git revert — это безопасный и простой способ возврата репозитория к предыдущему состоянию. так как история не изменяется, а дополняется, что позволяет делать правки ранее опубликованных коммитов.