2012-01-18 102 views
1

是否有将单个提交(例如,本地存储库中的提示变更集)转换为工作目录中的未提交更改的方法?
我知道hg strip删除指定的变更集并将其备份,但它是否会将这些变更集转换为工作目录中的未被更改的变更?将已提交的变更集转换为Mercurial中的未提交更改

编辑:的hg rollback

关于使用。

如果在我想要做hg rollback之前我有未提交的更改怎么办?我必须首先提交这些内容吗?最后几次提交呢?序列号hg rollback是否将这些提交的更改叠加到现有未提交的更改?

回答

7

如果你想重做最后一次提交(也许是一个更好的提交信息,也许修正了一个错误),那么你现在应该使用

$ hg commit --amend

更新最后承诺。如下所述,这比使用hg rollback安全得多。

如果提交是最后一次提交,你有没有更新任何地方,那么你可以使用hg rollback。请阅读hg help rollback - 这是一个潜在的破坏性命令。

它做什么:hg rollback将回滚您的存储库中的最后transaction。每当你hg commithg pullhg unbundle等,你创建一个新的交易。当一切安全存储后,Mercurial关闭交易。如果交易中出现问题,Mercurial可以恢复(请参阅hg recover)。您也可以使用hg rollback手动回滚上次交易。请参阅hg rollback --dry-run了解该命令将执行的操作。

回滚命令不会触及您的工作副本。这意味着显示为之前修改的文件将再次出现修改。所以很容易做

$ hg commit -m "Fixed buug-123" 

Ups,错误在提交消息!让我们来解决这个问题:

$ hg rollback 
$ hg commit -m "Fixed bug-123" 

(使用hg commit --amend与替代水银2.2及更高版本。)

最后提交信息也保存在.hg/last-message.txt这样你就可以从那里恢复它,如果你没有它你的shell历史。

如果在我想要执行hg回滚之前我有无法做出的更改会怎么样?我必须首先提交这些内容吗?

回滚不会触及工作副本。这意味着工作副本中的任何其他更改将与变更集中的更改一起显示。就好像你根本没有输入hg commit。

最后几次提交怎么样?连续hg回滚堆栈是否从提交更改为现有未被更改的更改?

不,你只有one level of rollback因为我们只跟踪最后的交易。

+0

如果在我想要执行'hg rollback'之前我有无限制的更改怎么办?我必须首先提交这些内容吗?最后几次提交呢?连续的'hg rollback'堆栈是否从那些提交改变为现有的未被改动的改变? – 2012-01-18 10:16:12

+0

回滚不会触及工作副本。这意味着工作副本中的任何其他更改将与变更集中的更改一起显示。就好像你没有输入'hg commit'。更改多个提交是另一个主题,请参阅[回滚多个提交](http://stackoverflow.com/q/4925094/110204),也许[更新提交消息](http://stackoverflow.com/a/8503002/110204) 。 – 2012-01-18 10:36:32

+0

值得一提的是,在想要解决提交消息的特定情况下,'hg commit --amend'可能更有用。这是在Mercurial 2.2中添加的,这个答案写完后四个半月。 – 2013-04-19 09:44:11

0

虽然你应该尽可能使用hg commit --ammend我现在更喜欢新的和更强大的mecurial历史编辑功能:hg histedit特别是如果你熟悉git。

你可以通过简单地做一个hg out(即你想选择未被推送的版本)来看到你想要返回的版本。