所以我总是在Mercurial中犯愚蠢的错误。通常情况下,我不会执行“hg拉取”和“hg更新”就开始工作。当我试图推动我的更改时,我得到一个错误。
有没有办法删除我的本地提交,这样我就可以避免创建多个头、分支等?我只想删除我的本地提交,将我的更改与提示合并,然后重新提交。听起来很简单,对吧?我似乎找不到任何方法来轻松地删除本地提交,这样我就可以干净地与技巧合并。
同样,我只是试图删除本地提交与“hg ci”。我不想修改文件,还原文件等等。
所以我总是在Mercurial中犯愚蠢的错误。通常情况下,我不会执行“hg拉取”和“hg更新”就开始工作。当我试图推动我的更改时,我得到一个错误。
有没有办法删除我的本地提交,这样我就可以避免创建多个头、分支等?我只想删除我的本地提交,将我的更改与提示合并,然后重新提交。听起来很简单,对吧?我似乎找不到任何方法来轻松地删除本地提交,这样我就可以干净地与技巧合并。
同样,我只是试图删除本地提交与“hg ci”。我不想修改文件,还原文件等等。
当前回答
Hg条就是你要找的。如果你熟悉git,它类似于git重置。
使用控制台:
你需要知道修订号。Hg log -l 10。该命令显示最近10次提交。找到你正在寻找的承诺。您需要更改集行changeset中的4位数字:5888:ba6205914681 然后hg strip -r 5888——保留。这将删除提交的记录,但保持所有文件的修改,然后您可以重新提交它们。 (如果你想删除文件,只需删除——keep hg strip -r 5888
其他回答
现代答案(仅适用于Mercurial 2.1之后):
使用phase并将您不想共享的修订标记为秘密(私有)。这样你按的时候就不会被发送了。
在TortoiseHG中,你可以右键点击commit来改变它的阶段。
另外:您还可以使用扩展“rebase”将本地提交移动到共享存储库的头部。
Hg条就是你要找的。如果你熟悉git,它类似于git重置。
使用控制台:
你需要知道修订号。Hg log -l 10。该命令显示最近10次提交。找到你正在寻找的承诺。您需要更改集行changeset中的4位数字:5888:ba6205914681 然后hg strip -r 5888——保留。这将删除提交的记录,但保持所有文件的修改,然后您可以重新提交它们。 (如果你想删除文件,只需删除——keep hg strip -r 5888
除了Samaursa的优秀答案,你可以使用进化扩展的修剪作为一个安全和可恢复的版本的strip,将允许你回去万一你做错了什么。
我在我的。hgrc上有这些别名:
# Prunes all draft changesets on the current repository
reset-tree = prune -r "outgoing() and not obsolete()"
# *STRIPS* all draft changesets on current repository. This deletes history.
force-reset-tree = strip 'roots(outgoing())'
请注意,prune也有—keep,就像strip一样,保持工作目录完整,允许您重新提交文件。
如果你正在使用Hg Tortoise,只需激活扩展“strip”:
文件/设置/扩展 选择带
然后从你想要开始条带化的地方选择底部的修订,右键单击它,然后选择:
修改历史 带
就像这样:
在本例中,它将从第19个修订删除到最后提交的修订(22)。
你可以使用Rebase扩展更容易地解决这个问题,只需要使用hg pull—Rebase,你的提交就会自动重新提交到被拉的修订中,避免了分支问题。