有没有办法将单个提交(例如我的本地存储库中的tip更改集)转换为工作目录中未提交的更改?
我知道hg strip
删除了指定的变更集并将其备份,但它是否将这些变更集转换为工作目录中未经更改的变更?
编辑:
关于 hg rollback
的使用。
如果我想要hg rollback
之前有未提交的更改,该怎么办?我必须先付款吗?最后几次提交怎么样?顺序hg rollback
是否会将这些提交的更改与现有的未提交更改进行叠加?
答案 0 :(得分:7)
如果您正在尝试重做最后一次提交(可能有更好的提交消息,可能修复了错误),那么您现在应该使用
<强>
$ hg commit --amend
强>更新上次提交。这比使用
hg rollback
更安全,如下所述。
如果提交是最后一次提交,并且未在任何地方更新,则可以使用hg rollback
。请阅读hg help rollback
- 这是一个潜在的破坏性命令。
它的作用:hg rollback
将回滚存储库中的最后一个transaction。每次hg commit
,hg pull
,hg 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
代替Mercurial 2.2及更高版本。)
最后一次提交消息也保存在.hg/last-message.txt
中,因此如果您的shell历史记录中没有它,则可以从那里恢复。
如果我想要进行hg回滚之前有未完成的更改怎么办?我必须先付款吗?
回滚不会触及工作副本。这意味着工作副本中的任何其他更改将与变更集中的更改一起显示。就好像你根本没有输入hg commit一样。
最后几次提交怎么样?顺序hg回滚是否会将这些提交的更改堆叠到现有的未更改的更改中?
不,您只有one level of rollback,因为我们只跟踪最后一笔交易。
答案 1 :(得分:1)
使用Mercurial Queues(折叠|展开变更集)
可以更轻松地将任何变更集(或变更集集)转换为本地变更TortoiseHG-centric manual(对于旧的GUI)逐步显示操作
答案 2 :(得分:0)
尽管你应该尽可能使用hg commit --ammend
,但我现在更喜欢新的更强大的mecurial历史编辑功能:hg histedit
,特别是如果你熟悉git。
您可以通过简单地执行hg out
来查看要返回的修订版本(即您想要选择尚未推送的版本)。