スナップショット
操作によって行った変更の結果をそのまま保存する
例)
Redux で action を発行するたびに、変更前の Store の状態をそのまま保存する
あんまりやらないって言ったけどやるような気もしてきた

Cons
簡単な操作でもメモリの使用量の増えが大きく、安定しない
複数人で同時編集を行いたい場合、容易にコンフリクトするため向かない
他人の編集を巻き込んで戻ってしまう
git push -f
っぽいことになりますね
Pros
アプリケーションの状態が複雑になっても、比較的に実装が簡単で、復元が楽
どのスナップショットを選んでも、アプリケーションはその状態を完璧に復元できる
逆操作コマンドの場合、コマンド単体ではアプリケーションの状態を復元できない
操作の前(後)の状態が必要
スナップショットはランダムアクセスに強く、
逆操作コマンドはシーケンシャルアクセスに強いとも言える
DBやファイル等に永続化しやすい

アプリがクラッシュしてもundoできる
正常終了した時もundoしたい事がありそう。先週のプレゼン資料をちょっと巻き戻したいとか

diffとスナップショットは相互変換可能のはずなので、もしかして自動で逆操作コマンドを作るようにすればいいとこ取りできるのでは