在mercurial创建新头

时间:2013-03-05 20:28:54

标签: mercurial branch

在我当前的工作流程中,每当我需要分支时,我都会使用书签,但是为了从当前版本创建一个新头,我必须提交一些虚拟更改并返回一个修订版,然后提交到那个,否则提交将无论我有多少书签,都要做同一个头。

例如,假设我在转40:

hg bookmark main
hg ci somefile -m 'dummy commit' # on rev 41 now
hg up -r 40
# make some changes
hg ci -A -m 'changes in bookmark' # created new head
hg bookmark test

这是常见还是有一些迫使创建一个新头?

2 个答案:

答案 0 :(得分:1)

我认为您想要练习nvie的工作流程,因此您希望使用--no-ff与上游合并。

据我所知,hg不支持在同一分支中与上游合并。正如这个post所说,hg的头部/书签是git't分支,而hg的分支是血统。

因此,解决方案是在分叉点,你改变书签和分支,然后你可以合并分支,因为它们是不同的血统。

您可以在我的示例中轻松hg branch -f dev,即使没有连接,也要重新打开分支。

所以你可以拥有像:

这样的分支
  • 默认
  • 稳定
  • 特征
  • 修补程序

然后书签应该是前缀:

  • 特征 - *
  • 修补程序 - *

他们应该分支相应的分支。

然后他们可以

Graphlog for my example

答案 1 :(得分:1)

您的示例中不需要创建第二个头,您也不应该强制创建它。

您的工作流程的优势在于您可以停止使用功能test来对主分支执行更紧急的更改,如下所示:

> hg bookmark main
> hg bookmark test         # Start work on feature test

 ... do some code ...

> hg commit -m "Working on feature test"
> hg update main           # Stop working on test, start working on main

 ... do an urgent fix ...

> hg commit -m "Urgent fix"
> hg update test           # Back to work on feature test

 ... do some more code ...

> hg update main           # Finished the work so back to main
> hg merge test            # Merge the work into main
> hg commit -m "Merge in feature test"

完成后,您将完成新功能并将其合并回主开发分支。

如果您在处理完功能main后未对test分支进行任何更改,那么您无法尽可能地合并这些更改' t将变更集合并到祖先中,因此您需要将main书签移动到test书签,如下所示:

> hg update test
> hg bookmark main -f

(我相信这被称为git中的快进合并,你可以根据需要强制合并,但据我所知,没有mercurial等价物。