Отмена коммита в Git: подробная инструкция
Чтобы отменить коммит в git, можно использовать команду `git reset`. Существует несколько способов, в зависимости от того, какой этап жизненного цикла коммита мы хотим отменить. Рассмотрим три варианта:
1. Отмена последнего коммита и сохранение изменений в рабочей директории.
Чтобы отменить последний коммит и оставить все изменения в рабочей директории, можно использовать команду `git reset --soft HEAD~1`. В этом случае HEAD, указывающий на текущую ветку, переместится на один коммит назад, и это позволит изменить его содержимое в новом коммите. Например:
// создаем некоторые изменения и фиксируем их в коммит
$ git add .
$ git commit -m "Сделал некоторые изменения"
// выявляем ошибку и хотим исправить последний коммит
$ git reset --soft HEAD~1
// вносим изменения и делаем новый коммит
$ git add .
$ git commit -m "Исправил ошибку в предыдущем коммите"
2. Отмена последнего коммита и сброс всех изменений.
В некоторых случаях возможно, что коммит нужно отменить полностью и сбросить все изменения, сделанные в нем. Для этого можно использовать команду `git reset --hard HEAD~1`. В данном случае все изменения в рабочей директории будут удалены, а HEAD перейдет на один коммит назад. Например:
// создаем некоторые изменения и фиксируем их в коммит
$ git add .
$ git commit -m "Сделал некоторые изменения"
// выявляем ошибку и хотим отменить последний коммит полностью
$ git reset --hard HEAD~1
// проверяем текущее состояние
$ git status
On branch master
nothing to commit, working tree clean
3. Отмена определенного коммита и сохранение изменений в рабочей директории.
Если нужно отменить коммит, сделанный ранее, можно использовать команду `git reset --soft <коммит>`, где <коммит> - это хеш-код (или первые несколько символов) коммита, который нужно отменить. В этом случае HEAD сместится на указанный коммит, и это позволит внести изменения и сделать новый коммит с этими изменениями. Например:
// проверяем список коммитов
$ git log --oneline
abcdefg Изменил некоторые вещи
hijklmn Добавил новую функциональность
// решаем отменить коммит с хеш-кодом "abcdefg"
$ git reset --soft abcdefg
// вносим изменения и создаем новый коммит
$ git add .
$ git commit -m "Новые изменения после отмены коммита"
При использовании команды `git reset` необходимо быть осторожным, так как она может привести к потере данных, если не используется правильно. Поэтому настоятельно рекомендуется перед любыми изменениями в ветке делать резервное копирование.