Статьи

Небольшой курс по Git — от первых команд до командной работы и выката в прод

Отмена изменений

Страница 4 из 8 · 2026-10-25 · 3 мин чтения

Выбор команды

СитуацияКоманда
Откатить изменения в файлеgit restore файл
Убрать файл из индексаgit restore --staged файл
Поправить последний коммитgit commit --amend
Отменить коммит, уже отправленный на серверgit revert
Убрать локальные коммитыgit reset
Отложить незаконченную работуgit stash
Вернуть «потерянное»git reflog

restore: рабочая папка и индекс

git restore app.txtgit restore .git restore --staged app.txtgit restore --source=HEAD~2 app.txt

git restore файл необратимо отбрасывает несохраненные изменения. Будьте осторожны.

amend: исправить последний коммит

Забыли файл или опечатка в сообщении:

git add forgotten.txtgit commit --amendgit commit --amend -m "Новое сообщение"git commit --amend --no-edit

amend создает новый коммит с новым хэшем. Не применяйте к коммитам, которые уже запушены в общую ветку.

reset: переместить ветку

git reset --soft HEAD~1git reset HEAD~1git reset --hard HEAD~1git reset --hard origin/main
РежимКоммитИндексРабочая папка
--softотмененизменения остаютсяостаются
--mixed (по умолчанию)отмененсброшеностаются
--hardотмененсброшенудалены

--hard уничтожает несохраненные изменения. Для общих веток reset не используют: он переписывает историю.

revert: безопасная отмена

Создает новый коммит, который отменяет изменения указанного:

git revert a1b2c3dgit revert HEADgit revert -m 1 хэш-merge-коммита

История не переписывается, поэтому revert подходит для коммитов, уже попавших в main или в прод.

stash: отложить работу

Нужно срочно переключиться на другую ветку, а текущая работа не готова:

git stashgit stash push -m "половина формы входа"git stash -ugit stash listgit stash popgit stash apply stash@{1}git stash drop stash@{0}git stash clear
  • pop применяет последний stash и удаляет его;
  • apply применяет и оставляет в списке;
  • -u включает неотслеживаемые файлы.

reflog: машина времени

Git помнит, куда указывал HEAD, даже после reset --hard:

git refloggit reset --hard HEAD@{2}git switch -c rescue a1b2c3d

Записи reflog хранятся примерно 90 дней. Удаленный коммит почти всегда можно вернуть, если вы его хотя бы один раз коммитили.

Если закоммитили в не ту ветку

git switch правильная-веткаgit cherry-pick хэшgit switch неправильная-веткаgit reset --hard HEAD~1

Если случайно закоммитили секрет

Удаление из следующего коммита недостаточно: пароль остался в истории.

  1. Немедленно отзовите и замените ключ или пароль у сервиса. Это главное.
  2. Затем при необходимости почистите историю инструментом git filter-repo и заставьте всех пересклонировать репозиторий.

Считайте, что любой секрет, попавший на сервер, уже скомпрометирован.

Очистка

git clean -ngit clean -fd

git clean -n показывает, что будет удалено. -fd удаляет неотслеживаемые файлы и папки безвозвратно.