Dealing with spam

In the case that some spam or inappropriate comment makes its way through you interface, you can (sometimes) remove the offending commit XYZ.

If the offending commit is the last commit

bzr bzr uncommit && bzr revert
darcs darcs obliterate –last=1
git git reset –hard HEAD^
hg hg rollback && hg revert

If the offending commit is not the last commit

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]  
[1]Requires the `bzr-rebase plugin`_. Note, you have to increment XYZ by hand for <XYZ+1>, because bzr does not support after:XYZ.

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”

Warnings about changing history

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.