Как в GIT откатить состояние файла до состояния в stage?

Есть проект, в котором я создал файл foo.py. Сделал в нем изменения и применил команду git add foo.py. Запустив команду git status вижу это(пусть будет ситуация 1):

On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   foo.py

Я не стал делать коммит, т.е. выполнять команду git commit и захотел немного улучшить решение. Другими словами сейчас мой проект находится в таком состоянии(пусть будет ситуация 2):

On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   foo.py

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   foo.py

Как мне сейчас из ситуации 2 прийти к ситуации 1? То есть убрать изменения из файла foo.py , как будто после ситуации 1 я ничего больше не писал.


Ответы (2 шт):

Автор решения: Герман Борисов

git checkout foo.py

Эта команда откатит указанный файл до состояния из индекса.

Найдено на англоязычном SO: https://stackoverflow.com/questions/3107789/using-git-how-do-you-reset-the-working-tree-local-file-system-state-to-the-st

Подробности можно найти в официальной документации https://git-scm.com/docs/git-checkout

PS даже сам вывод git status подсказывает эту команду.

→ Ссылка
Автор решения: had0uken

Команда

git checkout -- .

Она удаляет все НЕОТСЛЕЖИВАЕМЫЕ изменения. У вас разница между ситуация 1 и ситуация 2 только в том, что появились новые неотслеживаемые изменения. Эта команда их удалит, не трогая отслеживаемые. (Которые стали отслеживаемыми, когда вы выполнили команду add при ситуации 1).

→ Ссылка