Mercurial(hg)相当于git reset(--mixed或--soft)

Per*_*ids 51 mercurial

什么是等效的mercurial命令(或工作流程)

git reset --mixed HEAD^
Run Code Online (Sandbox Code Playgroud)

要么

git reset --soft  HEAD^
Run Code Online (Sandbox Code Playgroud)

即我希望保持工作树完整,但让存储库回到最后一次提交之前的状态.令人惊讶的是,我没有在stackoverflow或google上找到任何有用的东西.

请注意,我不能使用

hg rollback
Run Code Online (Sandbox Code Playgroud)

因为我在最后一次提交后使用HistEdit完成了一些历史记录重写.

补充说明: 经过一些重新定位和历史编辑后,我最终得到了A < - B < - C. 然后我用HistEdit将B和C压在一起,得到A < - C'.现在我想拆分提交C'(我​​在B中提交了错误的文件).我认为最简单的方法是将存储库恢复到状态A(技术上从未在存储库中存在,因为所有的重新定位和历史编辑事先)和工作树到状态C'然后做两个提交.

rai*_*ain 81

正确的复制方式git reset --soft HEAD^(撤消当前提交但保留工作副本中的更改)是:

hg strip --keep -r .
Run Code Online (Sandbox Code Playgroud)

-1只有在您要删除的提交是进入存储库的最后一次提交时才会起作用..指的是当前签出的提交,这是Mercurial与Git最接近的提交HEAD.

请注意,如果.有后代,那些也将被剥离.如果你想保持提交,那么一旦你有了提交ID,你可以改为:

hg update .^
hg revert --all -r <commit id>
Run Code Online (Sandbox Code Playgroud)

这将更新到提交的父级,然后使用该提交的版本替换工作副本中的文件.

  • Mercurial 2.8及更高版本附带专用的[strip extension](https://www.mercurial-scm.org/wiki/StripExtension). (2认同)
  • 为我工作!我收到一条警告,称“hg strip”将来可能会被弃用,我应该考虑使用“hg uncommit”或“hg undo -k”。 (2认同)