Чтобы вернуть состояние одного файла в то, которое было на момент определенного коммита, нужно сделать следующее:
1. Выяснить обозначение коммита через git log или подобную команду.
Предположим, что обозначение коммита 3f25701874aa5a2c16cc6275fa30baa5b6e477a6.
2. Следует дать команду:
git checkout 3f25701874aa5a2c16cc6275fa30baa5b6e477a6 <имя_файла>
где <имя_файла> - это имя файла с полным путем относительно корня репозитария, состояние которого нужно восстановить таким, которым оно было в коммите 3f25701874aa5a2c16cc6275fa30baa5b6e477a6.
Вместо обозначения коммита можно указывать коммиты по истории, например HEAD-1. (уточнить синтаксис).
Команду следует выполнять в корне репозитария. В принципе, если находиться в каталоге, где находится нужный файл, то в команде надо писать просто имя файла, но и команду тогда надо давать в каталоге с файлом.
Внимание! При написании имени файла ведущий слеш "/" не ставится, несмотря на то, что в выводе git log, при сравнении состояния файлов a и b, он есть. Пример:
commit 8eeb29f220f40b8abbbe0002a2fceb7cb107cb48
Author: xintrea
Date: Mon Dec 19 09:00:17 2016 +0300
FirstStadyCommit
diff --git a/doc/text.html b/doc/text.html
index 5074ebb..5ba83ab 100644
Binary files a/doc/text.html and b/doc/text.html differ
значит, команда будет:
git checkout 3f25701874aa5a2c16cc6275fa30baa5b6e477a6 doc/text.html