Undo is a command in many computer programs. It erases the last change done to the document reverting it to an older state. In some more advanced programs such as graphic processing, undo will negate the last command done to the file being edited.
The opposite of undo is redo. The redo command reverses the undo or advances the buffer to a more current state.
In most Windows applications, the Undo command is activated by pressing Ctrl-Z or Alt-Backspace. In most Macintosh applications, the Undo command is activated by pressing Command-Z. The common command for Redo on Microsoft Windows systems is Ctrl-Y or Ctrl-Shift-Z. The common command for Redo on Apple Macintosh systems is Command-Shift-Z.
Undo models can be categorized according to two criteria: linear vs non-linear, and single-user vs multi-user. Linear undo requires the user to revert the latest action before undoing earlier ones. With non-linear undo, the action to be reverted can be freely picked from the action history list.
Non-linear undo can be further subcategorized into direct selective undo vs. script interpretation undo vs. cascading undo.
When multiple users can edit the same document simultaneously, a multi-user undo is needed. Global multi-user undo reverts the latest action made to the document, regardless of who performed the edit. Local multi-user undo only reverts actions done by the local user. Local multi-user undo usually requires a non-linear undo implementation.
The number of previous actions that can be undone varies by program. For example, the stack size ranges from twenty in Photoshop to three edits in MS Paint. Simplistic, single-edit undo features sometimes do away with "redo" by treating the undo command itself as an action that can be undone. This is known as the flip undo model, because the user can flip between two program states using the undo command.
The Command pattern is a software design pattern which can be used to implement Multi-level Undo. The Memento pattern is useful for capturing the state of the program before user actions. This can be used for state reversal needed in some undo implementations.