Git restore: как отменить изменения в файле до коммита
Чтобы вернуть файл к последнему сохранённому состоянию и отбросить правки, выполните git restore путь/к/файлу. Для файла, который уже добавлен в индекс командой git add, используйте git restore --staged путь/к/файлу. Старый способ: git checkout -- файл.
Что делает каждая команда
Задача | Команда |
|---|---|
Отбросить правки в файле |
|
Отбросить правки во всех файлах |
|
Убрать файл из индекса, сохранив правки |
|
Отбросить и правки, и индекс |
|
Взять файл из другого коммита |
|
Удалить новые неотслеживаемые файлы |
|
Отменить правки в файле
git restore src/app.js # вернуть файл к состоянию в индексе
git restore . # то же для всех изменённых файлов
git checkout -- src/app.js # старый эквивалент, работает во всех версиях gitУбрать файл из индекса
Если вы случайно выполнили git add для лишнего файла:
git restore --staged src/secret.js # файл останется изменённым, но не попадёт в коммит
git reset HEAD src/secret.js # старый эквивалентВернуть файл из старого коммита
git restore --source=HEAD~2 src/app.js # версия двухкоммитной давности
git restore --source=main src/app.js # версия из другой веткиФайл появится в рабочей папке как обычная правка, которую можно добавить в новый коммит.
Удалить неотслеживаемые файлы
git restore не трогает новые файлы, которые git ещё не отслеживает. Для них есть git clean. Сначала посмотрите, что будет удалено:
git clean -n # показать список без удаления
git clean -fd # удалить файлы и пустые папки
git clean -fdx # то же, включая игнорируемые файлыЧастые вопросы
Чем restore отличается от reset?
git restore работает с файлами и не двигает ветку. git reset переносит указатель ветки на другой коммит и при режиме --hard перезаписывает все файлы.
Как отменить изменения только в одной части файла?
Используйте интерактивный режим: git restore -p файл. Git покажет блоки изменений по одному и спросит, отбросить ли каждый.