我的同事在错误的分支上的存储库中提交了两次。

什么是最有效的方法来进行这两次提交,将其删除,然后在正确的分支下正确地提交它们? (更改尚未推送)

理想情况下,我们希望从TortoiseHG中执行此操作,但当然,如果它是最佳选择,我们将使用命令行。

最佳答案

Mercurial Queues(mq)扩展可以提供帮助。

给定一个类似以下的更改历史记录:

@  changeset:   3:9dc681b56325
|  summary:     file4
|
o  changeset:   2:6675b3f86aa7
|  summary:     file3
|
| o  changeset:   1:4a3209ed5b2f
|/   summary:     file2
|
o  changeset:   0:6ab45ac3bd6d
   summary:     file1

以下命令将文件“file4”更改集移动到另一个分支(“file2”头):
hg qimport -r 3     // convert revision 3 to a patch
hg qpop             // remove it
hg update 1         // switch to the other branch head
hg qpush            // push the change back
hg qfin -a          // convert the applied patch back to a changeset

导致:
@  changeset:   3:3faa754edb0b
|  summary:     file4
|
| o  changeset:   2:6675b3f86aa7
| |  summary:     file3
| |
o |  changeset:   1:4a3209ed5b2f
|/   summary:     file2
|
o  changeset:   0:6ab45ac3bd6d
   summary:     file1

请注意,由于变更集现在具有不同的父级,因此修订版3的变更集哈希已更改。更高版本的TortoiseHg也支持MQ扩展。

10-08 11:09