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?

Original source

Related problems