It's tricky to get undo/redo to work with multiplayer. I started with a command-based history/syncing system, ran into some problems, then decided to move to diff-based system.
The problems I ran into with command-based history/syncing:
1. It's slower: each client has to execute each command, this is bad if the command involves a lengthy calculation.