Version control &引用;“bzr未提交”;相当于水银?

Version control &引用;“bzr未提交”;相当于水银?,version-control,mercurial,dvcs,bazaar,Version Control,Mercurial,Dvcs,Bazaar,Bazaar有一个很棒的uncommit命令,它可以简单地撤消最后一次提交。Mercurial中是否有任何等价物 编辑:Bazaar的uncommit命令不会修改文件–它会删除最后一次提交和关联的数据(例如,当您发现提交消息中存在键入错误或未添加本应添加的文件时,此命令非常有用) 例如: $ bzr ci -m "Fixed a proooblem" <-- problem is misspelt $ bzr uncommit ... $ bzr ci -m "Fixed a proble

Bazaar有一个很棒的
uncommit
命令,它可以简单地撤消最后一次提交。Mercurial中是否有任何等价物

编辑:Bazaar的uncommit命令不会修改文件–它会删除最后一次提交和关联的数据(例如,当您发现提交消息中存在键入错误或未添加本应添加的文件时,此命令非常有用)

例如:

$ bzr ci -m "Fixed a proooblem" <-- problem is misspelt
$ bzr uncommit
...
$ bzr ci -m "Fixed a problem" <-- Exactly as if the first commit was correct.

$bzr ci-m“修复了一个问题”难道“hg revert”不这样做吗?

也许
hg backout tip
?我推荐所有关于
hg backout
、它与
hg revert
的区别以及许多相关主题的详细信息,但如果我不了解
uncommit
的作用,它看起来确实相当于
hg backout tip

编辑:在你现在澄清的评论中,你想“删除历史”——这很难(除非你画得很快,也许;-)。。。再看看红豆书:

由于Mercurial将历史视为累积的,所以每次变更都建立在之前所有变更的基础上,所以通常不能让灾难性变更消失。一个例外是,您刚刚提交了一个更改,但它没有被推送到或拉到另一个存储库中。这时您可以安全地使用hg rollback命令


因此,如果您只是想“让它消失”(幸运的是,它还没有被推到其他地方),那么
hg rollback
可能是一个更好的方法

通过阅读注释,您似乎希望找到一种方法,可以简单地删除提交记录,而不撤消对文件的更改。在Mercurial中,没有自动执行此操作的方法
hg revert
是您将获得的最接近的

但是,您可以通过几个手动步骤来实现这一点。调用
hg revert
时,其默认行为是将要还原的更改集中的文件重命名为
filename.ext.orig
,其中
ext
是文件的原始扩展名。然后,还原的版本采用原始文件名。因此,您可以运行
hg revert
,删除具有原始名称的文件,并从备份文件的名称中删除
.orig
。然后使用更正的日志消息重新提交。除了提示之外,不要对任何修订版执行此操作,因为您可能会得到很多更改的文件,并且忘记哪些文件属于哪个更改集中

如果您已经将变更集推送到远程回购,我也不建议您这样做。只有在所有内容都是本地的情况下才能这样做

如果你需要进一步解释,请告诉我。我有时不得不这样做,所以我对这个过程很熟悉。

您需要这个命令,但如果您使用的是Mercurial 2.2或更高版本,请参见下文

rollback命令将从存储库中删除最后一个事务。提交是一个事务,因此您可以将其用作

% hg commit -m 'My elaburate bugfix.' foo.c foo.h
% hg rollback
% hg commit -m 'My elaborate bugfix.' foo.c foo.h
回滚后,文件将再次被视为已修改,这意味着第二次提交将存储与第一次提交相同的更改,但具有更好的提交消息

注意:
hg rollback
比简单的“uncommit”函数更强大,如果不小心,您可以使用它来扔掉工作。抛弃承诺

$ hg commit -m 'My big and very difficult bugfix'
$ hg pull --update
$ hg rollback
您现在已丢失上次提交,并且由于您将工作副本更新为其他版本,该提交中的更改已消失。因此,如果您确定
hg commit
确实是对工作副本操作的最后一个命令,则只应使用
hg rollback
撤消提交

此外,如果您没有在命令行上给出提交消息,那么您不能在回滚后只按两次向上箭头来重新执行提交。但是,Mercurial 1.5及更高版本会将您的最后一条提交消息保存在
.hg/last message.txt
中,以便您在回滚后总能再次找到它


Mercurial 2.2为
hg commit
添加了一个新的
--amend
标志。这让您可以用新的更改来修改上次提交。它只是将
hg status
列出的更改合并到父提交中,就好像您已经回滚并再次提交一样。

还有来自“mq”扩展的“hg strip”命令。它几乎完全等同于“bzruncommit”。不过要小心,当您将错误提交提前推送到另一个存储库时,将使用最近的拉取重新创建它。

它将还原文件,但我希望从历史记录中删除整个提交(消息和所有内容)。或者可能没有什么
hg help revert
没有显示给我…?“hg revert”不会改变历史。相反,“hg revert”会更改工作副本——您可以使用它将未限制的更改恢复到某个早期版本(通常是工作副本父版本)。若要重做提交,您不能使用“hg revert”,我建议改为使用“hg rollback”。关闭,但不能完全关闭
bzr revert
将保留所有文件,准备重新提交。无论如何,“hg回滚”似乎越来越像你想要的——它回滚最新的事务(提交或拉),不过,根据红豆书的再次说明,“你只能回滚一次”和“推后就没用了”。啊,是的,我刚读到有关回滚的内容,我想我会回来看看是否还有其他评论。回滚几乎就是我想要的。。。但它不会为我将文件放回原处(即,需要进行还原才能将文件放回提交前的位置)。。。但是我想我不会再抱怨了:)谢谢你的帮助,亚历克斯!感谢您的评论,但我认为
hg rollback
是我要寻找的。从hg命令行rollback帮助中,“它还将在最后一次事务时恢复dirstate。”这不是您想要避免的吗@