Forge should support undo/redo of changes on the file system. Use of git would rock here, particularly cases where Forge is introduced to an existing project, and determining what actually changed during a plugin execution could be nasty.
Care should be taken to integrate with projects that are already using git as a version control mechanism.
After every successful command execution, changes should be committed to the history branch. If an undo is requested, users could be presented with a list of revisions, or simply pop the latest revision off the stack. If a command exits in failure state, the user should be prompted to either "Undo" or "Abort," in which case, if "Undo" is selected, changes made during the failed command execution should be reverted to the previous state - "Abort" simply does nothing.
- Master/current branch is ahead of history branch
- Master/current branch is behind history branch
- How to handle running in detached state?
- How to handle rebasing of a branch to avoid merge commits?