Как откатить изменения в одном файле до состояния последнего коммита?
Наэкспериментировал в файле config.py, всё сломал и хочу вернуть файл к версии из коммита. Остальные файлы трогать нельзя. Как отменить изменения только в одном файле, не делая полный откат?
2 ответа
Зависит от версии git, но есть надёжный способ для всех.
Современный способ (git 2.23+) — команда restore:
git restore config.py
Это вернёт config.py к состоянию последнего коммита (HEAD), остальные файлы не тронет.
Старый способ, который работает везде, — checkout с --:
git checkout -- config.py
Две чёрточки -- тут важны: они говорят git «дальше идёт имя файла, а не ветки». Без них git может подумать, что config.py — это ветка.
Если файл уже добавлен в индекс (git add config.py), сначала убери его из staged, потом откати:
git restore --staged config.py
git restore config.py
Частая ошибка: думать, что restore/checkout спросит подтверждение. Нет — он молча перезапишет файл, и несохранённые правки пропадут безвозвратно. Перед откатом убедись, что точно не нужны изменения. Если сомневаешься — сначала git stash, чтобы спрятать правки, а не выбрасывать.
Запомни разницу:
- Откатить изменения в файле к коммиту:
git restore файл - Убрать файл из staged (отменить
git add), но изменения оставить:git restore --staged файл
До git 2.23 обе задачи решал git checkout и git reset. С 2.23 для этого ввели отдельную понятную команду restore, чтобы не перегружать checkout.