如何将错误修正提交到Mercurial中的先前标记?

时间:2014-02-06 07:29:26

标签: mercurial tags workflow branch

假设我有两个Mercurial分支:(1)默认和(2)稳定。我将错误修正推送到稳定,将新功能推送到默认。当默认添加了足够的功能时,默认会合并到稳定稳定然后标记为一个像样的标签。为简单起见,我只想说我使用标签1.0,1.1,1.2,1.3等。

现在,假设我使用标签1.3发布稳定。然后我继续开发,后来发布1.4和1.5。然后我注意到1.3(和1,4 + 1.5)中存在一个主要错误,我需要修复那个错误。我如何才能最好地回到1.3,修复该bug,并确保该bug也适用于1.4和1.5?

由于我在谈论标签,而不是分支机构,这有可能吗?从我的头脑中,我会说我会以某种方式需要回滚到稳定的 1.3标签,修复错误,然后将错误推送到1.3(然后将错误修正转发到1.4和1.5)。但是,回滚到标记与回滚到修订版基本相同。是否甚至可以回滚到之前的标签/修订版并将更改应用于“时间点”?

我如何才能最好地解决这个问题?

1 个答案:

答案 0 :(得分:2)

  

但是,回滚到标签与回滚到修订版基本相同。是否甚至可以回滚到之前的标签/修订版并将更改应用于“时间点”?

没有什么可以阻止你。您可以通过简单的提交来签出任何修订并从那里开始一个新的头。只有在推动您的更改时,当您推动具有多个头的分支时,Mercurial将阻止您(除非使用--force选项)。但你无论如何都不想推动多个头,因为bugfix提交应该被合并到主要的稳定和默认头部。

  

从我的头脑中,我会说我会以某种方式回滚到稳定的1.3标签,修复错误,然后将错误推送到1.3(然后将错误修正转发到1.4和1.5)

是的,这是基本的想法。让我们创建一个错误修复合并级联!

假设您有这样的历史记录:

@  changeset:   7:83f16f6d167d (tip)
|  summary:     new feature bar
|
| o  changeset:   6:c20d6c330271 (stable)
| |  summary:     Added tag v1.1.0 for changeset fd09feac2b59
| |
| o  changeset:   5:fd09feac2b59 (stable) (v1.1.0)
|/|  summary:     merge default into stable
| |
o |  changeset:   4:38ace577cfb7
| |  summary:     new feature foo
| |
| o  changeset:   3:0581117b05f7 (stable)
| |  summary:     Added tag v1.0.0 for changeset 5305c84aeebb
| |
| o  changeset:   2:5305c84aeebb (stable) (v1.0.0)
|/   summary:     new branch stable
|
o  changeset:   1:a8bf2fb0f30a
|  summary:     new features
|
o  changeset:   0:c70ef214ec57
   summary:     initial

那就是你在稳定分支上有2个版本:v1.0.0v1.1.0。现在你有一个紧急的bug来修复,你需要修复这两个版本,当然还有你的默认分支。这就是我要做的事情:

$ hg up v1.0.0
... fix the bug ...
$ hg commit -m 'fix that bug in v1.0'
$ hg tag v1.0.1
$ hg up v1.1.0
$ hg merge tip
... the merge  will raise conflicts in `.hgtags` ...
... make sure the resolved version contains the content of both sides ...
$ hg commit -m 'merge bugfix into v1.1'
$ hg tag v1.1.1
...

执行此操作直到所有版本都合并了错误修复。最后,还将错误修复合并到稳定分支的原始头部并进入默认分支。

$ hg up c20d6c330271
$ hg merge tip
$ hg commit -m 'merge bugfix into main head of stable'
$ hg up default
$ hg merge stable
$ hg commit -m 'merge bugfix from stable into default'

现在历史看起来像这样:

@    changeset:   13:358084bd1a91 (tip)
|\   summary:     merge bugfix from stable into default
| |
| o    changeset:   12:a12c5c10d9db (stable)
| |\   summary:     merge bugfix into stable
| | |
| | o  changeset:   11:e78d7ea72624 (stable)
| | |  summary:     Added tag v1.1.1 for changeset abd62a5ba092
| | |
| | o    changeset:   10:abd62a5ba092 (stable) (v1.1.1)
| | |\   summary:     merge bugfix into v1.1
| | | |
| | | o  changeset:   9:8f272cc5a565 (stable)
| | | |  summary:     Added tag v1.0.1 for changeset 21f31836b80c
| | | |
| | | o  changeset:   8:21f31836b80c (stable)
| | | |  summary:     fix that bug in v1.0
| | | |
o | | |  changeset:   7:83f16f6d167d
| | | |  summary:     new feature bar
| | | |
| o | |  changeset:   6:c20d6c330271 (stable)
| |/ /   summary:     Added tag v1.1.0 for changeset fd09feac2b59
| | |
| o |  changeset:   5:fd09feac2b59 (stable) (v1.1.0)
|/| |  summary:     merge default into stable
| | |
o | |  changeset:   4:38ace577cfb7
| | |  summary:     new feature foo
| | |
| o |  changeset:   3:0581117b05f7 (stable)
| |/   summary:     Added tag v1.0.0 for changeset 5305c84aeebb
| |
| o  changeset:   2:5305c84aeebb (stable) (v1.0.0)
|/   summary:     new branch stable
|
o  changeset:   1:a8bf2fb0f30a
|  summary:     new features
|
o  changeset:   0:c70ef214ec57
   summary:     initial

请注意,错误修复已经在上提交一次,但会将其合并到需要它的所有修订版和分支中。