In the case that some spam or inappropriate comment makes its way through you interface, you can (sometimes) remove the offending commit XYZ.
arch | |
bzr | bzr uncommit && bzr revert |
darcs | darcs obliterate –last=1 |
git | git reset –hard HEAD^ |
hg | hg rollback && hg revert |
mtn | mtn db kill_rev_locally $(mtn automate get_base_revision_id) |
arch | |
bzr [1] | bzr rebase -r <XYZ+1>..-1 –onto before:XYZ . |
darcs | darcs obliterate –matches ‘name XYZ’ |
git | git rebase –onto XYZ~1 XYZ |
hg [2] | |
mtn [3] |
[1] | Requires the `bzr-rebase plugin`_. Note, you have to increment XYZ by hand for <XYZ+1>, because bzr does not support after:XYZ. |
[2] | From `Mercurial: The Definitive Guide`_: “Mercurial also does not provide a way to make a file or changeset completely disappear from history, because there is no way to enforce its disappearance” |
[3] | See Rebuilding ancestry in the Monotone documentation. |
Note that all of these change the repo history , so only do this on your interface-specific repo before it interacts with any other repo. Otherwise, you’ll have to survive by cherry-picking only the good commits.