Mercurial: roll back an "hg commit --amend".
Solution 1
NOTE: This answer is now deprecated. See the answer from @Sorina Sandu instead.
See hg help commit
, where it says:
The --amend flag can be used to amend the parent of the working directory with a new commit that contains the changes in the parent in addition to those currently reported by "hg status", if there are any. The old commit is stored in a backup bundle in ".hg/strip-backup" (see "hg help bundle" and "hg help unbundle" on how to restore it).
Solution 2
You can use hg reflog
(from the journal extension) and hg reset <hash>
.
hg reflog -v
should give something like:
<old-hash> -> <new-hash> <user> <timestamp> commit --amend <some-path>
if that is the amend you want to revert, just use:
hg reset <old-hash>
The commit will be reverted to what is previously was and the changes that were amended should now be uncommitted changes (check using hg status
and hg diff
).
Solution 3
If your version of Mercurial is new enough, I believe you should be able to use the hg unamend
command from the uncommit
extension that ships with Mercurial. This may require that obsolescence markers are enabled, I'm not sure.
-
Enable the
uncommit
extension, add this to your~/.hgrc
:[extensions] uncommit =
-
Actually run the unamend:
hg unamend
Solution 4
- Find the latest saved backup in
.hg/strip-backup
directory hg unbundle .hg/strip-backup/<latest backup>
- Now you should have two heads - one with the amended commit, other one with two commits (first one - old commit before amending, second one caled: "temporary amend commit for (old commit hash)".
- if you have
histedit
extension, you can dohg histedit
on it in order to change it (e.g. selectedit
in order to achieve a state just before the commit, i.e. when you can see all changes usinghg diff
).
Don't forget to strip the old head.
![Don P](https://i.stack.imgur.com/ufPVV.jpg?s=256&g=1)
Comments
-
Don P about 2 years
I accidentally did a "hg commit --amend" instead of just a commit. How can I roll back the commit to before the amend?