← Все вопросы

Как откатить изменения в одном файле до состояния последнего коммита?

Задан 12 месяцев назад1.4к просмотров2 ответа
9

Наэкспериментировал в файле config.py, всё сломал и хочу вернуть файл к версии из коммита. Остальные файлы трогать нельзя. Как отменить изменения только в одном файле, не делая полный откат?

2 ответа

11
✓ Принятый ответ — помог автору

Зависит от версии 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, чтобы спрятать правки, а не выбрасывать.

3

Запомни разницу:

  • Откатить изменения в файле к коммиту: git restore файл
  • Убрать файл из staged (отменить git add), но изменения оставить: git restore --staged файл

До git 2.23 обе задачи решал git checkout и git reset. С 2.23 для этого ввели отдельную понятную команду restore, чтобы не перегружать checkout.

Ваш ответ

Войдите, чтобы ответить на вопрос.