Я успешно использовал следующее.
Сначала верните полный коммит (поместите его в индекс), но не коммитите.
git revert -n <sha1> # -n is short for --no-commit
Затем в интерактивном режиме удалите отмененные ХОРОШИЕ изменения из индекса
git reset -p # -p is short for --patch
Затем выполните обратный дифференциал плохих изменений
git commit -m "Partially revert <sha1>..."
Наконец, отозванные ХОРОШИЕ изменения (которые не были установлены командой сброса) все еще находятся в рабочем дереве. Они должны быть очищены. Если в рабочем дереве не осталось других незафиксированных изменений, это можно сделать с помощью
git reset --hard