This is probably going to sound nuts, but I'd rather see the revise action only happen to the temporary copy of an object that is created when you check it out. If you decide to delete the revised and checked out object from your workspace (without every checking it in), then the revise effectively never took place. Fundamentally I think its crazy to make the last iteration of one revision exactly the same as the first iteration of the next revision.
If you want to change something that's released, you should do a "revise and checkout". If you later cancel the checkout, the revise should be cancelled (or undone) as well.
The first iteration created at a new revision should actually be something new.
Right now, for every single revise you do, you have a corresponding version that (as far as I know) isn't good for anything.