问题
I accidentally did a "hg commit --amend" instead of just a commit. How can I roll back the commit to before the amend?
回答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).
回答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).
回答3:
- Find the latest saved backup in
.hg/strip-backupdirectory 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
histeditextension, you can dohg histediton it in order to change it (e.g. selecteditin 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.
回答4:
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
uncommitextension, add this to your~/.hgrc:[extensions] uncommit =Actually run the unamend:
hg unamend
来源:https://stackoverflow.com/questions/16697393/mercurial-roll-back-an-hg-commit-amend