Наконец, я сам нашел относительно короткое решение.
Сначала я получаю номер ревизии последнего «хорошего» коммита (скажем, 1) и неправильный коммит (скажем, 2).
1) Я обновляюсь до patchA, отменяю изменения в файле B, фиксирую их и добавляю изменения вверх:
hg up patchA
hg revert -r1 fileB // get fileB before the wrong change
hg commit -m"revert fileB"
hg pmerge -a
2) Снова обновляюсь до patchA, возвращаю неверный коммит и создаю новый патч:
hg up patchA
hg revert -r2 fileB // get fileB after the wrong change
hg pnew patchA2
Теперь у нас есть изменения файла A в patchA, а остальные в patchA2.