Многие ответы здесь утверждают, что используют git reset ... <file>
или git checkout ... <file>
, но при этом вы потеряете все модификации на <file>
, зафиксированные после коммита, который вы хотите отменить.
Если вы хотите отменить изменения из одного коммита только для одного файла, точно так же, как git revert
, но только для одного файла (или, скажем, подмножества файлов коммитов), я предлагаю использовать как git diff
, так и git apply
вот так (с <sha>
= хэш коммита, который вы хотите отменить):
git diff <sha>^ <sha> path/to/file.ext | git apply -R
По сути, он сначала сгенерирует патч, соответствующий изменениям, которые вы хотите отменить, а затем примените к нему патч в обратном порядке, чтобы удалить эти изменения.
Конечно, он не будет работать, если перевернутые строки были изменены любым коммитом между <sha1>
и HEAD
(конфликт).