【发布时间】:2010-12-10 04:27:54
【问题描述】:
基本上,我有 dev 分支,我喜欢做的是在实现某些东西时创建一个功能分支,然后将其合并回来。所以会出现如下情况
a
b
c
d - dev
/
e
f - feature
既然 dev 不是 head,是否仍然可以将 dev 提升到 feature 使得 dev 和 feature 都指向 f?
我很确定 git 可以很好地做到这一点,但似乎无法说服 Mercurial 也这样做......
【问题讨论】:
基本上,我有 dev 分支,我喜欢做的是在实现某些东西时创建一个功能分支,然后将其合并回来。所以会出现如下情况
a
b
c
d - dev
/
e
f - feature
既然 dev 不是 head,是否仍然可以将 dev 提升到 feature 使得 dev 和 feature 都指向 f?
我很确定 git 可以很好地做到这一点,但似乎无法说服 Mercurial 也这样做......
【问题讨论】:
hg 中的命名分支(与 git 不同)不会“指向”任何地方。分支名称不是特定版本的可移动别名。每个提交都有一个元数据标记,命名提交所在的分支;就是这样。
在这种情况下,如果你在 dev 分支上没有从“d”下降的单独提交,那么你需要做的就是运行“hg branch dev”,然后你的下一个提交,从“f”下降,将回到分支开发。我认为这将达到您正在寻找的结果。
编辑:这可行,但 Steve Losh 建议进行实际合并将导致更合理的历史记录。
【讨论】:
卡尔迈耶是对的。您以 git 用户的身份思考,而 Mercurial 处理事情的方式不同。
你可以按照 Carl 的建议去做,然后强制下一个提交在 dev 分支上。如果我看到它,我个人会觉得这相当令人困惑,因为 dev 分支中会出现不连续性。
我的处理方式是将功能分支合并回:hg update dev && hg merge feature && hg commit -m 'Merge in the completed feature.'
这将导致如下图:
a - dev
b - dev
c - dev
d - dev
/|
e | - feature
f | - feature
\|
g - dev
对我来说,这清楚地说明了到底发生了什么。您分支了一个新功能,并在完成后将其合并到 dev 分支中。在此期间 dev 上没有其他提交的事实只是一个巧合,不必更改工作流程。
【讨论】: