#Как выглядит неисправность
Вернуть одну версию файла из старого коммита можно без отката всей ветки. Основной риск — перезаписать незакоммиченные изменения этого конкретного файла.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Выбран неверный коммитВ истории похожие изменения в соседних фиксациях | git log -- path/to/file показывает несколько кандидатов | Сначала посмотреть файл через git show |
| В рабочем файле есть новые правкиВнесены ещё не сохранённые изменения | git status --short отмечает файл буквой M | Сохранить отдельную копию перед restore |
#Пошаговое устранение
- 1. Откройте нужный проект и найдите файлВ терминале из корня репозитория выполните git status --short и убедитесь, что путь совпадает с нужным. Если файл уже изменён — скопируйте его через проводник в другое место.
- Проверка незакоммиченных правок, не меняет файлыLinux · Терминал (Bash)КомандаПроверка незакоммиченных правок, не меняет файлы.
git status --short
- 2. Найдите правильный коммитВыполните git log --oneline -- path/to/file, найдите коммит по дате и описанию. Если переименования важны, отдельно посмотрите историю с --follow для одного файла. Не используйте хэш из чужого примера.
- Читает историю указанного файлаLinux · Терминал (Bash)КомандаЧитает историю указанного файла.
git log --oneline -- path/to/file
- 3. Посмотрите старое содержимое без перезаписиВведите git show ХЭШ:path/to/file для текстового файла; укажите настоящий короткий или полный хэш и путь из корня репозитория. Для бинарного файла лучше смотреть описание через git log и сравнить копии, не выводя двоичные данные в терминал.
- Замените ХЭШ и путь: только просмотрLinux · Терминал (Bash)КомандаЗамените ХЭШ и путь: только просмотр.
git show ХЭШ:path/to/file
- 4. Восстановите файл только после проверкиВыполните git restore --source=ХЭШ --worktree -- path/to/file. В рабочей копии появится содержимое выбранного коммита. Если файл отсутствует в том коммите — проверьте историю и правильность написания.
- Перезаписывает указанный файл в рабочей копии, не меняя индекс; сначала сделайте копиюLinux · Терминал (Bash)С осторожностьюПерезаписывает указанный файл в рабочей копии, не меняя индекс; сначала сделайте копию.
git restore --source=ХЭШ --worktree -- path/to/fileКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 5. Сравните результат и протестируйтеВыполните git diff -- path/to/file, откройте восстановленный файл и запустите связанные тесты. Если версия не подошла, верните ранее сделанную внешнюю копию; не сбрасывайте всю ветку через reset --hard.
- Сравнение восстановленного файла с индексом и общий статусLinux · Терминал (Bash)КомандаСравнение восстановленного файла с индексом и общий статус.
git diff -- path/to/filegit status --short
- 6. Сохраните проверенное изменениеЕсли изменение правильное и должно войти в историю, отдельно подготовьте только этот файл через git add -- path/to/file и выполните привычный commit; сообщение объясняет, какой файл и почему восстановлен. Если нужно только временно посмотреть — не создавайте коммит.
#Как проверить результат
Файл соответствует ожидаемому коммиту; остальные файлы и история ветки не затронуты. Если содержимое не совпадает, повторно проверьте путь относительно корня и хэш.
#Если проблема осталась
Не повторяйте опасные действия на рабочем окружении. Сравните первоначальный симптом с новым состоянием, сохраните обезличенные сообщения и версии компонентов, проверьте резервную копию; перед изменением общей истории Git или данных/сети Docker обратитесь к ответственному администратору проекта.