11

仕事で困難に遭遇しました(以下の簡略化されたスケッチに示されているように)。ブランチの作成中に、何らかの理由でデフォルトがブランチの親として動かなくなりましたが、デフォルト ブランチは個別に保持されています (これが今後使用するデフォルト ブランチです)。これにより、2 つのデフォルト ブランチが残りました。

誰かがブランチの前に変更をコミットする方法を間違えたため、branch1 で行われた変更を branch2 にマージすることになりました。

私はMercurial: the definitive guideを調べて、これが解決可能な問題であるかどうかを確認しましたが、バックアウトまたはクローズに関するどのコマンドが役立つかを見つけることができませんでした。最も簡単な方法は、残っているデフォルト ブランチの名前を変更できる場合です。

これを解決するための最良かつ/または最も簡単な方法は何ですか?

開発ブランチを正しいデフォルト ブランチにマージする準備をしていて、今後これを修正するのがさらに難しくなる可能性のある主要なマージを開始する前に、この頭痛の種を修正したいと考えています。

分岐の問題

4

2 に答える 2

11

ブランチ名はコミットに付けられた単なるラベルであることを忘れないでください — グラフに関して実際に壊れているものは何もありません。ブランチ名は、マージ時に何が起こるかに影響しません。マージ時に重要なのはファイルの内容だけです。

そうは言っても、default以下の余分な頭を閉じることができますbranch1

$ hg update "min(heads(branch(default)))"
$ hg commit --close-branch -m "closing this head"

これにより、グラフにぶら下がっているクローズチェンジセットが残りますが、これは問題ありません。変更セットを閉じると、ヘッドが非表示になり、hg headsなどのコマンドhg mergeは、このヘッドとのマージを提案しなくなります。

于 2012-08-22T13:43:29.060 に答える
3

古い質問ですが、これは誰かに役立つかもしれません。

..これは、単一のブランチが分岐したときに発生します。通常、誰かがhg push -fプルして更新する代わりに実行したときに発生します。あなたの場合、強制ヘッドはたまたま別のブランチにもありますが、これは単一のブランチでも発生する可能性があります。私の解決策は、ブランチがマージされるまで放置することです-少なくとも、ある時点でそれらをマージする計画がある場合. 私の意見では、この解決策は、誤った頭を閉じるよりもきれいです。

ただし、実行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)

..そして、誰にも影響しないので、誤ったデフォルトを無視することができます。..その後、誰かがhg update default; hg merge branch1. ..結果は次のようになります。

1-2-5----------11(default)
 \            /
  3-4-[...]-10(branch1)

..希望するデフォルトで役に立たないコミットを行うこともできます。そうすれば、それが最新になり、人々がそうするときに取得するものになりますがhg update default、履歴にジャンクコミットがあるのは本当に好きではありません。

于 2013-07-23T03:45:14.817 に答える