假设我有两个 Mercurial 分支:(1) 默认 和 (2) 稳定。我将错误修复推送至稳定,并将新功能推送至默认。当default中添加了足够的功能时,default就会被 merge 到stable中。然后稳定会被贴上合适的标签。为了简单起见,我们假设我使用标签 1.0、1.1、1.2、1.3 等。
现在,假设我发布了带有标签 1.3 的稳定。然后我继续开发,后来发布了 1.4 和 1.5。然后我注意到 1.3(和 1,4 + 1.5)中存在一个主要错误,我需要修复该错误。我如何最好地返回到 1.3,修复该错误,并确保该错误也适用于 1.4 和 1.5?
当我谈论标签而不是分支时,这可能吗?从我的头脑中,我想说我需要以某种方式回滚到 stable 1.3 标签,修复错误,然后将错误推送到 1.3(然后将错误修复转发到1.4 和 1.5)。然而,回滚到标签本质上与回滚到修订版本相同。是否可以回滚到以前的标签/修订版并将更改应用到该“时间点”?
如何最好地解决这个问题?
最佳答案
However, rolling back to a tag is essentially the same as rolling back to a revision. Is it even possible to roll back to a previous tag/revision and apply changes to that "point in time"?
没有什么可以阻止你。您可以 checkout 任何修订并通过简单的提交从那里开始一个新的头。仅当推送更改时,当您推送具有多个头的分支时,Mercurial 才会阻止您(除非使用 --force
选项)。但无论如何你都不想推送多个头,因为错误修复提交应该 merge 到主稳定和默认头中。
From the top of my head, I'd say that I would somehow need to roll back to stable's 1.3 tag, fix the bug and then push the bug to 1.3 (and then forward-port the bugfix to 1.4 and 1.5)
是的,这就是基本思想。让我们创建一个错误修复 merge 级联!
假设你有这样的历史:
@ 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
。现在您有一个紧急的错误需要修复,您需要修复两个版本,当然也需要修复您的默认分支。这就是我要做的:
$ 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
...
执行此操作,直到所有版本都 merge 了错误修复。最后,还将错误修复 merge 到稳定分支的原始头部和默认分支中。
$ 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
请注意,该错误修复仅提交了一次,但已将其 merge 到需要的所有修订和分支中。
关于mercurial - 如何对 Mercurial 中的先前标签提交错误修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21596618/