所以我总是在Mercurial中犯愚蠢的错误。通常情况下,我不会执行“hg拉取”和“hg更新”就开始工作。当我试图推动我的更改时,我得到一个错误。

有没有办法删除我的本地提交,这样我就可以避免创建多个头、分支等?我只想删除我的本地提交,将我的更改与提示合并,然后重新提交。听起来很简单,对吧?我似乎找不到任何方法来轻松地删除本地提交,这样我就可以干净地与技巧合并。

同样,我只是试图删除本地提交与“hg ci”。我不想修改文件,还原文件等等。


当前回答

你可以使用Rebase扩展更容易地解决这个问题,只需要使用hg pull—Rebase,你的提交就会自动重新提交到被拉的修订中,避免了分支问题。

其他回答

现代答案(仅适用于Mercurial 2.1之后):

使用phase并将您不想共享的修订标记为秘密(私有)。这样你按的时候就不会被发送了。

在TortoiseHG中,你可以右键点击commit来改变它的阶段。

另外:您还可以使用扩展“rebase”将本地提交移动到共享存储库的头部。

[Hg龟4.6.1] 如果是最近的操作,可以使用“回滚/撤销”操作(Ctrl+U)。

启用“strip”扩展并输入以下内容:

hg strip #changeset# --keep

其中#changeset#是您想要删除的更改集的散列。这将删除所述的更改集,包括从它派生的更改集,并将保持您的工作目录不变。如果您希望也恢复您提交的代码更改,请删除——keep选项。

有关更多信息,请检查条带扩展。

如果你得到“未知命令'strip'”,你可能需要启用它。要做到这一点,找到.hgrc或mercury .ini文件并添加以下内容:

[extensions]
strip =

注意(正如Juozas在他的评论中提到的)拥有多个头部在Mercurial中是正常的工作流程。您不应该使用strip命令来对抗它。相反,您应该将您的头部与传入的头部合并,解决任何冲突,测试,然后推送。

当您确实希望摆脱污染分支的变更集时,strip命令非常有用。事实上,如果你处于这个问题的情况下,你想要完全永久地删除所有“草案”更改集,请查看顶部的答案,它基本上建议这样做:

hg strip 'roots(outgoing())'

如果你熟悉git,你会很乐意使用histedit,就像git rebase -i一样。

如果你正在使用Hg Tortoise,只需激活扩展“strip”:

文件/设置/扩展 选择带

然后从你想要开始条带化的地方选择底部的修订,右键单击它,然后选择:

修改历史 带

就像这样:

在本例中,它将从第19个修订删除到最后提交的修订(22)。