git restore
git restore: восстановить (англ. restore) рабочее дерево и/или область подготовки.
git restore возвращает файлы в известное состояние. По умолчанию эта команда заменяет файлы в рабочем дереве на те, что находятся в области подготовки. Если в области подготовки пусто, результат будет таким же, как в последнем коммите.
С флагом --staged она сбрасывает область подготовки до состояния последнего коммита (или коммита, указанного через --source), но оставляет рабочее дерево без изменений. Именно так можно убрать файлы из области подготовки, не теряя при этом сами правки.
Команда git restore появилась в Git 2.23.0 как специализированный инструмент для отмены локальных изменений или удаления файлов из области подготовки. Если по привычке всё делается через git reset, можно продолжать в том же духе, но git restore сложнее использовать неправильно, и она затрагивает только рабочее дерево и область подготовки, не трогая историю коммитов.
Сценарии использования
-
Восстановить рабочее дерево (в области подготовки пусто): Появились правки, которые хочется отменить. Возвращаем рабочее дерево к последнему коммиту.
Решение:
git restore --worktree .ИЛИ простоgit restore ., так как режим--worktreeработает по умолчанию. -
Восстановить область подготовки, сохранив рабочее дерево: в область подготовки попало лишнее. Сбрасываем область подготовки до состояния последнего коммита, оставляя правки в рабочем дереве.
Решение:
git restore --staged . -
Восстановить рабочее дерево, сохранив область подготовки: в область подготовки добавлено нужное, но после этого появились правки, которые не нравятся. Возвращаем рабочее дерево к состоянию области подготовки.
Решение:
git restore --worktree .ИЛИgit restore . -
Восстановить и область подготовки, и рабочее дерево: Хочется удалить вообще всё — и добавленное в область подготовки, и то, что осталось снаружи. Возвращаем всё к последнему коммиту.
Решение:
git restore --worktree --staged .
Примеры
Отменить изменения в конкретном файле:
git restore README.mdОтменить изменения во всех файлах текущей директории (путь . означает «здесь»):
git restore .Убрать файл из области подготовки, но сохранить его изменения в рабочем дереве:
git restore --staged README.mdУбрать всё из области подготовки и сбросить рабочее дерево до последнего коммита:
git restore --worktree --staged .Восстановить файл из определённого коммита:
git restore --source a1b2c3d4 README.mdВыбрать интерактивно, какие правки оставить, а какие отменить:
git restore --patchИли в сокращённом варианте:
git restore -p.gitignoregit checkoutgit configgit taggit worktree