Merzial中的"bzr uncommit"相当于?

Dav*_*ver 12 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 problem" <-- Exactly as if the first commit was correct.
Run Code Online (Sandbox Code Playgroud)

Mar*_*ler 23

您需要该hg rollback命令,但如果您使用的是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
Run Code Online (Sandbox Code Playgroud)

在回滚之后,文件将再次被视为已修改,这意味着第二次提交将存储与第一次相同的更改,但具有更好的提交消息.

注意: hg rollback比简单的"uncommit"功能更强大,如果你不小心你可以用它来扔掉工作.扔掉一个提交

$ hg commit -m 'My big and very difficult bugfix'
$ hg pull --update
$ hg rollback
Run Code Online (Sandbox Code Playgroud)

您现在已经丢失了最后一次提交,并且由于您将工作副本更新为其他修订版,因此该提交中的更改已消失.因此,hg rollback如果您确定hg commit实际上是在工作副本上运行的最后一个命令,那么您应该仅用于撤消提交.

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

水银2.2有一个新的--amend标志hg commit.这让你用新的修改修改最后一次提交.它只是将列出的更改hg status合并到父提交中,就像您已经回滚并再次提交一样.


Ale*_*lli 8

也许hg backout tip?我推荐http://hgbook.red-bean.com/read/finding-and-fixing-mistakes.html了解所有细节hg backout,它有何不同hg revert,以及许多相关主题,但如果我不明白uncommit它是什么,它看起来似乎完全等同于hg backout tip.

编辑:在评论中,你现在澄清了你想要"删除历史" - 这很难(除非你在抽奖中非常快,也许; - )...再次根据红豆书:

由于Mercurial将历史视为累积 - 每次变更都建立在之前的所有变化之上 - 您通常无法让灾难性的变化消失.一个例外是当您刚刚提交更改时,它尚未被推送或拉入另一个存储库.那时你可以安全地使用hg rollback命令

所以,如果你只是想尝试 "让它消失"(和你足够幸运,它尚未推或拉其他地方),则hg rollback可能是一个更好的办法!