Глиф Учебники

Как откатить файл к прошлой версии

Справочник · Git · 2 минуты чтения

Файл изменён, но коммита ещё нет — вернуть его к последнему коммиту:

Bash
git restore README.md

Вернуть файл к версии из определённого коммита:

Bash
git log --oneline -- README.md
git restore --source=5e634b3 README.md

Первая команда показывает коммиты, которые меняли этот файл, — выберите нужный хеш. Вторая записывает версию файла из этого коммита в рабочую папку. Чтобы она осталась в истории, сделайте коммит: git commit -am "README.md возвращён к прежней версии".

В Git старше 2.23 команды restore нет. То же самое: git checkout -- README.md и git checkout 5e634b3 -- README.md. Вторая запись работает и сейчас, но сразу кладёт файл и в индекс.

git restore файл выбрасывает незакоммиченные правки в этом файле без возврата: в корзину они не попадают. Если правки могут пригодиться, сначала отложите их через git stash.

Восстановить удалённый файл

Файл удалён, но коммита с удалением ещё нет — git restore README.md, как выше.

Если удаление уже закоммичено, найдите коммит, в котором файл удалили, и возьмите версию из коммита перед ним (^ или ~1 после хеша — «родитель этого коммита»):

Bash
git log --oneline -- README.md
git restore --source=9fe2e20~1 README.md

Первая строка вывода git log — коммит удаления, у вас это будет свой хеш вместо 9fe2e20.

Убрать файл из индекса

Файл добавлен через git add по ошибке — уберите его из индекса, правки в файле останутся:

Bash
git restore --staged README.md

Отменить все изменения в проекте

Вернуть все отслеживаемые файлы к последнему коммиту:

Bash
git restore .

Новые, ещё не добавленные файлы restore не трогает. Посмотреть, что будет удалено, и удалить их:

Bash
git clean -n
git clean -fd

-n только показывает список, -f удаляет файлы, -d — ещё и папки.

git clean -fd удаляет неотслеживаемые файлы с диска насовсем, а git reset --hard ещё и выбрасывает все незакоммиченные правки. Это не отменить. Перед ними — всегда git status и git clean -n. Файлы из .gitignore clean -fd не трогает, а с ключом -x удаляет и их — например, .env с настройками.

Вернуть весь проект к прошлому коммиту

Посмотреть, как было, ничего не меняя: git switch --detach 5e634b3 (выход — git switch main, подробнее — detached HEAD). Отменить коммиты, оставив их в истории, — git revert, убрать их из истории — git reset; что выбрать, — в справке Как отменить последний коммит.