What is the difference between hg revert and hg backout?
backout, mercurial, revert
Solution
Given the history of changesets:
A --- B --- C --- D --- E
[bad] (*)
`hg revert -r B`: Stay at current revision, but update the working directory as of revision `B`. It has the effect of a patch that revokes the changes of `C`, `D` and `E`.
`hg backout -r C`: Update the working directory so that it contains the merge of revision C's parent (`B`) and the current revision, preserving the changes made in between the two revisions (working dir still contains changes of revision `D` and `E`). This has the effect of a patch applied on `E`, undoing the changes of only `C`.
You may want to edit some files if not all of `C` was bad. Remember to do a `hg commit` in any case:
A --- B --- C --- D --- E --- F
[bad] (*)
Problem
Both `hg revert` and `hg backout` revert changes made by a former revision. What is the difference between the two?