假设我有两个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)。但是,回滚到标记与回滚到修订版基本相同。是否甚至可以回滚到之前的标签/修订版并将更改应用于“时间点”?
我如何才能最好地解决这个问题?
答案 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.0
和v1.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
请注意,错误修复已经在上提交一次,但会将其合并到需要它的所有修订版和分支中。