Mercurial撤消上次提交

Mercurial撤消上次提交,mercurial,tortoisehg,mercurial-commit,Mercurial,Tortoisehg,Mercurial Commit,如何撤销Mercurial中最后一次意外提交(未推送)的更改 如果可能的话,最好用乌龟来做 更新 在我的具体案例中,我提交了一个变更集(不是推式的)。然后我从服务器中提取并更新。有了这些新的更新,我决定我的上一次提交已经过时,我不想同步它。因此,hg rollback似乎不完全是我要搜索的,因为它会回滚pull而不是我的commit。一种方法是(从2013年8月的Hg2.7开始就不推荐使用) 请使用而不是rollback来更正上次提交中的错误 回滚存储库中的最后一个事务 当或时,Mercuria

如何撤销Mercurial中最后一次意外提交(未推送)的更改

如果可能的话,最好用乌龟来做

更新

在我的具体案例中,我提交了一个变更集(不是推式的)。然后我从服务器中提取并更新。有了这些新的更新,我决定我的上一次提交已经过时,我不想同步它。因此,
hg rollback
似乎不完全是我要搜索的,因为它会回滚pull而不是我的commit。

一种方法是(从2013年8月的Hg2.7开始就不推荐使用)

请使用而不是
rollback
来更正上次提交中的错误

回滚存储库中的最后一个事务

当或时,Mercurial最后添加条目。
Mercurial保留一个事务日志,记录每个文件的名称及其在事务之前的长度。中止时,它会将每个文件截断为其先前的长度。这种简单性是制作append only的一个好处。事务日志还允许撤消操作

见:

还详细说明了
hg rollback
hg strip
之间的区别:
(由世卫组织撰写,世卫组织也为此作出贡献)

  • hg rollback
    ”将删除最后一个事务。事务是数据库中常见的一个概念。在Mercurial中,我们在运行某些操作时启动事务,例如提交、推送、拉取…
    当操作成功完成时,事务被标记为已完成。如果发生错误,事务将“回滚”,存储库将保持与以前相同的状态。
    您可以使用“hg rollback”手动触发回滚。这将撤消最后一个事务命令。如果一个pull命令将10个新变更集带到不同分支上的存储库中,那么“
    hg rollback
    ”会将它们全部删除。 请注意:回滚事务时没有备份

  • hg strip
    ”将删除变更集及其所有后代。这个 变更集另存为一个捆绑包,如果需要,可以再次应用该捆绑包 我需要他们回来

意见中建议(2016年,5年后)

您可以先通过hg忘记文件来“取消提交”,例如:
hg忘记文件A;hg commit--amend
,但这似乎不直观。
可能是现代汞的更好解决方案

这就是你想要的

在TortoiseHg中,
hg回滚
在提交对话框中完成。打开提交对话框并选择“撤消”


既然你不能回滚,你应该将提交合并到新的头中。如果你不想在其中做任何工作,你可以很容易地使用

因此,如果您已经拉取并更新了他们的头部,您可以这样做:

hg --config ui.merge=internal:local merge
保留当前签出版本中的所有更改,而不保留未签出版本(您编写的不再需要的版本)中的任何更改

这是一个很好的方法,因为它可以保持您的历史记录的准确性和完整性。如果两年后有人在你拆下的东西中发现了一个bug,你可以查看你的(未使用但保存的)相同东西的实现,然后说,“哦,我做对了”。)

将从存储库中完全删除修订版(以及所有子版本)

要使用strip,您需要在.hgrc(或mercurial.ini)中添加以下行以进行安装:

在TortoiseHg中,工作台中提供strip命令。右键单击修订并选择“修改历史记录”->“删除”


由于
strip
更改了存储库的历史记录,因此您只能在尚未与任何人共享的修订版上使用它。如果您使用的是mercurial 2.1+,则可以使用来跟踪此信息。如果提交仍处于起草阶段,则尚未与其他存储库共享,因此您可以安全地将其剥离。(感谢Zasurus指出这一点)。

在你拉取并更新你的工作区后,做一个thg,右键单击你想要删除的更改集,然后单击修改历史->删除,它将删除更改集,你将指向默认提示

它的解决方法


若您不推送到服务器,您将克隆到新文件夹中,否则将从存储库文件夹中清除(删除所有文件)并克隆新文件夹

在当前版本的OrtoiseHG Workbench 4.4.1(2018年7月)中,您可以使用
存储库
-
回滚/撤消…


我认为现在更现代、更简单的方法是
hg uncommit
。请注意,这会留下一个空的提交,如果您希望稍后重用提交消息,这将非常有用。如果没有,请使用
hg uncommit--no keep
不保留空提交

hg uncommit[选项]。。。[文件]

取消部分或全部本地变更集的提交

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

很抱歉,我不确定什么是龟甲。我最近遇到了这个问题,尽管我的情况略有不同-我已经推动了我想要撤销的提交。我用
hg backout
解决了我的问题。它的工作方式似乎与git revert类似。发件人:

backout
:创建与给定提交相反的新提交。 净效果是撤销,但更改仍保留在您的历史记录中

在TortiseHg中,可以通过右键单击要撤消的提交并选择
Backout…
来完成此操作。TortiseHg博士

我认为有理由创建一个新的撤销提交,而不是完全删除以前的提交。从大约
git还原

它不是从项目历史记录中删除提交,而是 了解如何反转提交引入的更改并附加 使用生成的反向内容进行新提交。这可以防止Git 丢失历史记录,这对修订的完整性很重要 历史的
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