Undo/Redo is one of those features of an application that you almost always need to have if you are building serious GUI tools for people to do work.
The best way to look at undo/redo is two stacks of operations the user has performed:
- The Undo stack is the "history" of what they've done
- The redo stack is the breadcrumbs back to the initial state before they started undoing