Вы можете использовать git checkout -p, что позволяет вам выбирать отдельные фрагменты из разницы между вашей рабочей копией и индексом для возврата. Аналогично, git add -pпозволяет вам выбирать блоки для добавления в индекс и git reset -pпозволяет выбирать отдельные блоки из разницы между индексом и HEAD для возврата из индекса.
$ git checkout -p file/to/partially/revert
# or ...
$ git checkout -p .
Если вы хотите сделать снимок вашего репозитория git заранее, чтобы сохранить эти изменения перед их отменой, я хотел бы сделать:
$ git stash; git stash apply
Если вы используете это часто, вы можете использовать псевдоним:
[alias]
checkpoint = !git stash; git stash apply
Отмена отдельных фрагментов или строк может быть еще проще, если вы используете хороший режим редактора или плагин, который может обеспечить поддержку выбора строк для прямого возврата, что -pиногда может быть немного неуклюжим для использования. Я использую Magit , режим Emacs, который очень полезен для работы с Git. В Magit вы можете запустить magit-status, найти различия для изменений, которые вы хотите отменить, выбрать строки, которые вы хотите отменить (или просто навести курсор на блоки, которые вы хотите отменить, если вы хотите отменить блок за раз вместо линия за раз), и нажмите, kчтобы отменить эти конкретные линии. Я настоятельно рекомендую Magit, если вы используете Emacs.