为什么我有时但不总是在Mecurial的一个分支上最终得到两个头?

时间:2014-09-12 16:58:21

标签: mercurial

我有时但并不总是在我的默认分支上有两个头。事件的顺序如下:

hg pull
hg update -C default
hg branch mybranch
hg merge default //merge in default
hg commit -m"merged mybranch into default"
hg heads -default //shows 2 heads 
hg push --branch default //won't let ne. create 2 heads

'竞争对手' head似乎是在当天早些时候承诺违约的变更集。

我不明白为什么有时会发生这种情况,而不是其他时间。

我通常提供的解释是,在我做了拉动之后,另一个人推动了改变(我在上面列表中的第一个动作)。但我认为这种情况会发生在其他情况下在我开始之前,他推动了他的变革。

我原本以为当我用他的提交拉出默认值时,我会默认一个头。我的合并/提交应该在此之后创建一个新的头。为什么会创建第二个头?

2 个答案:

答案 0 :(得分:2)

首先,这是一个完全正常的情况。这不是问题,也不是错误,或者需要避免的事情 - 这就是DVCS的工作方式。

简而言之:每当两个人从同一个提交开始工作并做不同的事情时,你会得到两个头。如果他们在自己的(命名的)分支(如上所述)或default上进行操作并不重要。将您的工作合并回default并且其他人已经完成default工作后,您就会有两个人,而且有人必须合并。事情就是这样。

在您推送hg pull然后hg merge之前,您可以通过创建新的合并提交,将您的工作与您的工作整合在一起,与两位家长 - 您的工作和工作 - 然后你推,你不会看到那个警告。

顺便提一下,您可能需要查看bookmarks功能。它更适合你看起来比你正在使用的命名分支上面的每个功能分支,但它绝不会让你不必处理多个头。

答案 1 :(得分:0)

  1. 使用hg heads
  2. 立即检查存储库状态(拉可以为您带来默认值)
  3. hg branch没有提交什么都没做(你没有“mybranch”)
  4. 即使您要创建mybranch并将其与默认提示合并(根据您的语法),它也不会消除默认的第二个头