Полагаю, это зависит от того, какие функции вам нужны, а также от размера / формата файлов.
Первый вариант самый простой, и он дает вам именно то, что вы хотите с минимальными накладными расходами.
Второй вариант имеет то преимущество, что вы можете обнаружить, когда изменения были отменены вручную, так что никаких реальных изменений в конце концов нет (хотя, вероятно, это происходит не слишком часто).С другой стороны, сделать различие намного дороже, просто чтобы проверить, было ли что-то изменено.Вы, вероятно, не хотите делать это каждый раз, когда пользователь нажимает клавишу.
Третий вариант дает возможность предоставить историю отмен.Вы можете ограничить количество элементов в этой истории, сгруппировав изменения, которые были сделаны последовательно (без перемещения курсора между ними), или что-то в этом роде.