14. Отмена коммитов
Цели
- Научиться отменять коммиты в локальном репозитории.
01 Отмена коммитов
Иногда вы понимаете, что новые коммиты являются неверными, и хотите их отменить. Есть несколько способов решения этого вопроса, здесь мы будем использовать самый безопасный.
Мы отменим коммит путем создания нового коммита, отменяющего нежелательные изменения.
02 Измените файл и сделайте коммит
Измените файл hello.html
на следующий.
Файл: hello.html
<html>
<head>
</head>
<body>
<h1>Hello, World!</h1>
<!-- This is an unwanted but committed change -->
</body>
</html>
Выполните
git add hello.html
git commit -m "Oops, we didn't want this commit"
03 Сделайте коммит с новыми изменениями, отменяющими предыдущие
Чтобы отменить коммит, нам необходимо сделать коммит, который удаляет изменения, сохраненные нежелательным коммитом.
Выполните
git revert HEAD
Перейдите в редактор, где вы можете отредактировать коммит-сообщение по умолчанию или оставить все как есть. Сохраните и закройте файл. Вы увидите:
Результат
$ git revert HEAD
[main 86364a1] Revert "Oops, we didn't want this commit"
Date: Tue Nov 28 05:51:38 2023 -0600
1 file changed, 1 deletion(-)
Так как мы отменили самый последний произведенный коммит, мы смогли использовать метку HEAD
в качестве аргумента для отмены коммита. Мы можем отменить любой произвольной коммит в истории, указав его хеш.
04 Проверьте лог
Проверка лога показывает нежелательные и отмененные коммиты в наш репозиторий.
Выполните
git log
Результат
$ git log
86364a1 2023-11-28 | Revert "Oops, we didn't want this commit" (HEAD -> main) [Alexander Shvets]
6a44bec 2023-11-28 | Oops, we didn't want this commit [Alexander Shvets]
b7614c1 2023-11-28 | Added HTML header (tag: v1) [Alexander Shvets]
46afaff 2023-11-28 | Added standard HTML page tags (tag: v1-beta) [Alexander Shvets]
78433de 2023-11-28 | Added h1 tag [Alexander Shvets]
5836970 2023-11-28 | Initial commit [Alexander Shvets]
Эта техника будет работать с любым коммитом (хотя, возможно, возникнут конфликты). Она безопасна в использовании даже в публичных ветках удаленных репозиториев.
05 Далее
Далее давайте посмотрим на технику, которая может быть использована для удаления последних коммитов из истории репозитория.