的等效mercurial命令(或工作流程)
git reset --mixed HEAD^
或
git reset --soft HEAD^
即。我希望保持工作树的完整性,但让存储库回到最后一次提交之前的状态。令人惊讶的是,我没有在stackoverflow或google上找到任何有用的东西。
请注意,我无法使用
hg rollback
因为我在最后一次提交后使用HistEdit完成了一些历史记录重写。
添加澄清: 经过一些重新定位和历史编辑后,我最终得到了A&lt; -B&lt; - C。然后我用HistEdit将B和C压在一起,得到A < - C'。现在我想拆分提交C'(我在B中提交了错误的文件)。我认为最简单的方法是将存储库恢复到状态A(技术上从未在存储库中存在,因为所有的重新定位和历史编辑事先)和工作树到状态C'然后做两个提交。
答案 0 :(得分:76)
复制git reset --soft HEAD^
(撤消当前提交但保留工作副本中的更改)的正确方法是:
hg strip --keep -r .
-1
仅在您要删除的提交是进入存储库的最后一次提交时才有效。 .
指的是当前签出的提交,这是Mercurial与Git的HEAD
最接近的等价。
请注意,如果.
有后代,那么这些后代也会被删除。如果你想保持提交,那么一旦你有了提交ID,你可以改为:
hg update .^
hg revert --all -r <commit id>
这将更新到提交的父级,然后使用该提交的版本替换工作副本中的文件。
答案 1 :(得分:0)
我相信现在更现代,更简单的方法是hg uncommit
。请注意,这留下了一个空的提交,如果您以后要重用提交消息,这将很有用。如果不这样做,请使用hg uncommit --no-keep
不保留空提交。
hg取消提交[OPTION] ... [FILE] ...
取消提交部分或全部本地变更集
This command undoes the effect of a local commit, returning the affected files to their uncommitted state. This means that files modified or deleted in the changeset will be left unchanged, and so will remain modified in the working directory. If no files are specified, the commit will be left empty, unless --no-keep