古い質問ですが、これは誰かにとって有用かもしれませんが。
.これは、通常、誰かが引っ張って更新する代わりにhg push -f
を実行したときに、1つの分岐が分岐するときに発生します。あなたの場合、強制的な頭部は別の枝にも起こりますが、これは単一の枝でも起こります。私の解決策は、ブランチがマージされるまで座っておくことです。少なくとも、ある時点でそれらをマージする計画があれば。私の意見では、この解決策は誤った頭を閉じるよりも清潔です。
ただし、hg update default
を実行すると、「デフォルト」の名前で最新のコミットになります。私はこの考え方があなたのケースでは正しいと思いますが、これはあなたが実際に望む「デフォルト」が「デフォルト」のブランチ名を持つ最新のコミットなので、問題はないはずです。しかし、誤った頭が新しい場合、hg update default
は人を誤った頭に連れてしまうので、かなり混乱する可能性があります。いずれの場合も
、これは問題を解決します:
hg update <revision number of correct 'default' head>
hg merge <branch the erroneous 'default' head is on>
したがって、この場合には、hg update default
が誤っヘッドに更新しますが:
1-2(default)
\
3(default)-4(branch1)
あなたがする必要があるでしょう:
hg update 2
hg merge branch1
# results in this graph:
# 1-2---5(default)
# \ /
# 3-4(branch1)
以下、hg update default
はあなたが行動するものに更新されます
1-2------------5(default)
\
3(default)-4(branch1)
を..and、それは誰に影響を与えませんので、あなただけの、誤ったデフォルトを無視することができます:uallyとにかく欲しいです。その後、誰かがhg update default; hg merge branch1
をやったら、間違った「デフォルト」の祖先なので、間違った頭が黙って消えてしまいます。 ..youも役に立たないが、ご希望のデフォルトにコミット行うことができ、その後、それが最新になり、そしてそれは彼らが行うとき、1人が得るだろう
1-2-5----------11(default)
\ /
3-4-[...]-10(branch1)
:..whichこのようなものになるでしょうhg update default
しかし、私は本当にジャンクを歴史に残しておきたいとは思わない。
ソートされていると思います。 'hg rebase'や' hg strip'の経験はありますか?いいことは、branch1とbranch2を1つのブランチとして持つことです。 branch2は基本的にbranch1で行われた変更ですが、デフォルトのbranchは含まれていません。 – Patrick
リベースとストリップのドキュメントを読んだら、通常はリポジトリとプッシュまたは共有されていないコミットでのみ使用されます。 – Patrick
@Patrick:あなたはリベースとストリップに関して正しいです。すでにチェンジセットを別の場所にプッシュしていると、両方のコマンドが非効率的になります。何も破損することはありませんが、サーバーからプルすると元のチェンジセットが戻ってくることがわかります。これは、コマンドの効果を無効にします( 'hg strip'の場合)か、乱雑です(' 'hg rebase''の場合)。 –