Иногда при работе с Git вам может потребоваться отменить последнюю фиксацию. Коммит — это моментальный снимок репозитория Git в определенный момент времени. В Git есть ссылочная переменная HEAD, которая указывает на последнюю фиксацию в текущей рабочей ветке. Чтобы отменить фиксацию, все, что вам нужно сделать, это указать переменной HEAD на предыдущий снимок.
В этой статье объясняется, как отменить последнюю фиксацию Git.
Не рекомендуется отменять фиксацию, уже отправленную в общий репозиторий. Если вы хотите изменить только сообщение фиксации, ознакомьтесь с этой статьей.
В Git вы можете отменить изменения, используя команду git reset, за которой следует идентификатор фиксации.
git reset принимает дополнительные аргументы, которые позволяют вам управлять поведением команды. Чтобы лучше понять, как работает reset, давайте поговорим о трех разных деревьях Git. Архитектура с тремя деревьями — ключевая концепция системы управления Git. Их называют деревьями, потому что они представляют собой наборы файлов.
Git управляет следующими тремя деревьями:
У команды git reset есть три аргумента, которые соответствуют трем деревьям:
Для отмены последней фиксации без потери изменений, сделанных в локальные файлы и индекс, за вызовом git reset с опцией —soft следует HEAD~1:
git reset --soft HEAD~1
HEAD~1- это переменная, указывающая на предыдущую фиксацию. Приведенная выше команда перемещает текущую ветвь назад на одну фиксацию, эффективно отменяя вашу последнюю фиксацию. Если вы запустите команду git status, вы увидите, что измененные файлы перечислены как незафиксированные изменения.
Чтобы обновить указатель HEAD для сброса индекса, запустите git reset с параметром —mixed или без него:
git reset --mixed HEAD~1git reset HEAD~1
Измененные файлы сохраняются, но, в отличие от предыдущего примера, теперь изменения не ставятся для фиксации.
Если вы не хотите сохранять изменения, внесенные в файлы, вызовите команду git reset с опцией —hard:
git reset --hard HEAD~1
Перед выполнением аппаратного сброса убедитесь, что вам больше не нужны изменения.
С помощью git resetвы можете вернуться к любой предыдущей фиксации.
Например, чтобы переместить текущую ветку на три коммита назад, вы должны использовать:
git reset --hard HEAD~3
Поскольку мы используем —hard, приведенная выше команда удалит последние три снимка из истории фиксации.
Другой способ вернуться к конкретной фиксации — передать команде идентификатор фиксации git reset.
Используйте git log —oneline, чтобы найти идентификаторы фиксации:
git log --oneline
Команда отобразит список всех коммитов, включая идентификатор и первую строку сообщения о фиксации:
32921222 (HEAD -> master) Update changelog 7505724c adding new tests 750862ce new blog post 95a63417 sort configuration file 252032e4 Refactor User class ...
Как только вы узнаете идентификатор коммита, к которому хотите выполнить сброс, просто передайте его команде git reset:
git reset --hard 95a63417
Чтобы отменить последнюю фиксацию, используйте команду git reset. Не сбрасывайте отправленные коммиты, так как это может вызвать множество проблем для ваших коллег.
Если вы столкнулись с проблемой или хотите оставить отзыв, оставьте комментарий ниже.