Отмена закоммиченных изменений
Вернуть конкретный файл в состояние конкретного коммита можно так:
git checkout <commit> <file>
Этот файл “откоммитится” и останется в индексе. Этот файл теперь можно закоммитить либо вернуть из индекса и удалить изменения теми же:
git restore --staged <file>
git restore <file>
Отмена конкретного коммита:
git revert <commit>
Эта процедура тоже по сути является коммитом, message которого будет что-то типа Revert "some commit message"
. А чтобы не делать коммит каждый раз (если, к примеру, будем revert-ить несколько коммитов) при revert-е -нужно:
git revert --no-commit <commit>
И дальше можно сделать один общий коммит о сделанных revert-ах.