2012-02-27 11 views
7

私はnamedブランチを水銀で作成し、いくつかの変更を加えましたが、今度はそれを中央のレポに戻したいと思います。私はフェッチをしました、私はマージするための変更がないことを確認しましたが、プッシュをしようとすると、私はメッセージを取得していますpush creates new remote headしかし、私はなぜ理解していません。私はの唯一の開発者です。ブランチであり、それはまだ私のリポジトリのローカルです。新しいブランチをプッシュするときに新しいリモートヘッド

>hg fetch (pull/update/merge) 
>hg status (shows nothing) 
>hg push --new-branch mybranch 
searching for changes 
new remote heads on branch 'default' 
new remote head c3064f3cf1b7 
abort: push creates new remote head c3064f3cf1b7! 
(did you forget to merge? use push -f to force) 

編集:混乱のため申し訳ありませんが、このは更新hg branch mybranch

によって作成という名前のブランチです:hg headsを使用すると、すべての異なるブランチに複数のヘッドが得られます。 hg log -r c3064f3cf1b7を使用して

changeset: 515:97b9a7802751 
branch:  mybranch 
user:  me <[email protected]> 
date:  Mon Feb 27 13:21:54 2012 -0800 
files:  CryptoRandom.cs 
description: 
fixing error message for size of max 


changeset: 504:c3064f3cf1b7 
user:  me <[email protected]> 
date:  Thu Feb 09 11:41:32 2012 -0800 
files:  CipherKey.cs 
description: 
removing ambiguous characters - CAC-47 

は(これはデフォルトのヘッドである)以下が得られます:私は、デフォルトの下で私の枝に1つ、および1つを持っている

changeset: 504:c3064f3cf1b7 
user:  me <[email protected]> 
date:  Thu Feb 09 11:41:32 2012 -0800 
files:  CipherKey.cs 
description: 
removing ambiguous characters - CAC-47 
+1

'HG heads'はあなたにすべてのヘッドが表示されます。それは 'c3064f3cf1b7'が他のヘッドとどこに立っているのかを教えてください。 –

+1

@JoelBFantまでフォローアップ: 'hg log -r c3064f3cf1b7'。それはあなたが新しい名前のブランチを持っていないようだが、デフォルトの匿名ブランチ –

+0

がブランチについての詳細を追加した。私はそれが名前付きブランチであると確信しています... – earthling

答えて

1

これをちょうど魔法のように解決しましたが、それでもなお理由は明らかになりません。私はそのブランチで作業していないのに、defaultの問題であるようです。 >hg branchに電話して、期待されるブランチ名を得ることができました。

ローカルのdefaultブランチに変更がありましたが、これはプッシュされておらず、不要でした。私はその変化から脱却してからコミットしました。私はその後fetchをデフォルトブランチ上で行い、それを私のフィーチャーブランチにマージしました。その後、defaultに戻って私は、私が信じていないデフォルトでチェンジセットとマージしました。そのプロセスのある時点で、私はもう一つの頭部を手に入れました。おそらく複数の合併が起こりました。

デフォルトではすべて既存のヘッドに沸騰しているようですが、別の名前付きブランチに影響する理由(または理由はわかりません)はまだわかりません。

このすべて

私が起こること(単にアスキー図に何皆を引き出すことができます)期待する何のために過度に複雑に見える編集

問題は、おそらく最初の枝の間に茎のように見えます。私は二度分岐したように見え、[j]はデフォルトでは匿名ブランチです。

ソートの[j]に行くしているように見えるものを可視化するため、私は外と[k]裏打ちされた、私のチェンジはmybranchにコミット私の最初です:

[a] -- [b] -- [c] -- [d] -- [e] (default) 
     \    \ /
      [j]-----------\---  (not sure where this branch came from) 
      \   \ 
      [k] -- [l] -- [m] (mybranch. Still separate from default) 
14

混乱は--new-branchフラグは効果がありませんということですフィーチャーブランチをプッシュするとき(任意のブランチとも呼ばれます)。匿名のブランチは次のようになります。

... [a] --- [b] --- [c] <- the servers head on default 
       \ 
       [x] --- [y] <- my feature branch on default 

すべてのチェンジはそうあなたが今二つのヘッドdefaultを持ってdefaultです。プッシュすると、サーバー上に2つのヘッドが作成されますが、Mercurialはその前に警告を表示して中止します。サーバ上に複数の頭を持つことは混乱しているので、中断します。hg cloneあなたの作業コピーは、そのうちの1つにほぼランダムに更新されます。

--new-branchフラグはnamed branchesです。 Mercurialは通常、新しい名前付きブランチをリモートリポジトリにプッシュすると中断します。 --new-branchフラグを追加すると、それをどのように進めるかがわかります。

残念ながら、専用の--create-new-feature-branchフラグはありません。我々は--forceフラグを持っているだけで、Mercurialがリモートリポジトリに2つのヘッドを作成するよう指示します。 --forceの欠点は、すべての安全性チェックを覆すことです.3つ以上の新しいヘッドをそのフラグでプッシュすることができ、無関係のリポジトリに押し込むことさえできます。 hg outgoingを使用して、何を押し込むかを再確認してください。

私は、新しいクローンがランダムな頭に更新されるため、サーバー上の複数のヘッドが混乱していると書きました。混乱を避けるために、機能ブランチの名前にのブックマークを付けることができます。あなたはまだランダムな頭に更新されますが、hg bookmarksは利用可能な機能の分岐を表示し、次に正しいものに更新することができます。そのようなワークフローを使用している場合は、hg push -fに進みます。

+0

名前付きブランチを使用していることを明確にするために投稿を更新しました。 – earthling

+0

私は 'hg branch'とタイプし、' default'ではなく 'php7'というブランチ名を取得します。しかし、私はまだ '--new-branch 'でプッシュできませんでした。それは私が名前の枝にいなかったことを意味しますか?これはどのように可能ですか?プッシュする唯一の方法は 'hg push -f'だったが、それは' php7'という名前の私の新しいブランチには気に入らなかった。 –

関連する問題