I came across this problem too. I made 2 commit
and wanted to rollback and delete both commits.
$ hg rollback
But hg rollback
just rolls back to the last commit, not the 2 commits. At that time I did not realize this and I changed the code.
When I found hg rollback
had just rolled back one commit, I found I could use hg strip #changeset#
. So, I used hg log -l 10
to find the latest 10 commits and get the right changeset I wanted to strip
.
$ hg log -l 10
changeset: 2499:81a7a8f7a5cd
branch: component_engine
tag: tip
user: myname<[email protected]>
date: Fri Aug 14 12:22:02 2015 +0800
summary: get runs from sandbox
changeset: 2498:9e3e1de76127
branch: component_engine
user: other_user_name<[email protected]>
date: Mon Aug 03 09:50:18 2015 +0800
summary: Set current destination to a copy incoming exchange
......
$ hg strip 2499
abort: local changes found
What does abort: local changes found
mean? It means that hg
found changes to the code that haven't been committed yet. So, to solve this, you should hg diff
to save the code you have changed and hg revert
and hg strip #changeset#
. Just like this:
$ hg diff > /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff
$ hg revert file_you_have_changed
$ hg strip #changeset#
After you have done the above, you can patch
the diff file and your code can be added back to your project.
$ patch -p1 < /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff