如何在Mercurial中删除一些应用于错误分支的提交,然后在正确的分支上重放它们?

Nei*_*den 12 mercurial tortoisehg

我的同事已经在错误的分支上对他的存储库进行了两次.

获取这两个提交,摆脱它们然后在正确的分支下正确提交它们的最有效方法是什么?(没有推动更改)

理想情况下,我们想从TortoiseHG中做到这一点,但当然,如果它是最好的选择,我们将使用命令行.

Mar*_*nen 14

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
Run Code Online (Sandbox Code Playgroud)

以下命令将文件'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
Run Code Online (Sandbox Code Playgroud)

导致:

@  changeset:   3:3faa754edb0b
|  summary:     file4
|
| o  changeset:   2:6675b3f86aa7
| |  summary:     file3
| |
o |  changeset:   1:4a3209ed5b2f
|/   summary:     file2
|
o  changeset:   0:6ab45ac3bd6d
   summary:     file1
Run Code Online (Sandbox Code Playgroud)

请注意,由于变更集现在具有不同的父变换,因此rev 3的变更集散列已更改.更高版本的TortoiseHg也支持MQ扩展.


Nei*_*den 6

从我发现的,移植是最好的扩展使用.它将changset应用于您希望的任何其他修订版.

http://mercurial.aragost.com/kick-start/tasks.html#transplanting-changes

我的问题的解决方案是更新到应该应用两个更改的分支,移植两个更改集,然后使用mq去除更改.在tortoisehg中也可以做到.