16. Отмена коммитов
Цели
- Научиться отменять коммиты в локальный репозиторий.
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 --no-edit [master 45fa96b] Revert "Oops, we didn't want this commit" 1 files changed, 1 insertions(+), 1 deletions(-)
Так как мы отменили самый последний произведенный коммит, мы смогли использовать HEAD
в качестве аргумента для отмены. Мы можем отменить любой произвольной коммит в истории, указав его хэш-значение.
Примечание: Команду --no-edit
можно проигнорировать. Она была необходима для генерации выходных данных без открытия редактора.
04 Проверьте лог
Проверка лога показывает нежелательные и отмененные коммиты в наш репозиторий.
Выполните:
git hist
Результат:
$ git hist * 45fa96b 2011-03-09 | Revert "Oops, we didn't want this commit" (HEAD, master) [Alexander Shvets] * 846b90c 2011-03-09 | Oops, we didn't want this commit [Alexander Shvets] * fa3c141 2011-03-09 | Added HTML header (v1) [Alexander Shvets] * 8c32287 2011-03-09 | Added standard HTML page tags (v1-beta) [Alexander Shvets] * 43628f7 2011-03-09 | Added h1 tag [Alexander Shvets] * 911e8c9 2011-03-09 | First Commit [Alexander Shvets]
Эта техника будет работать с любым коммитом (хотя, возможно, возникнут конфликты). Она безопасна в использовании даже в публичных ветках удаленных репозиториев.
05 Далее
Далее давайте посмотрим на технику, которая может быть использована для удаления последних коммитов из истории репозитория.
prev | next