2011-08-03 17 views
25

1つのブランチに2つのヘッドがある場合はどうなりますか?私は何週間か前に何らかの理由でこの状況に遭遇しました。今私は他の頭を取り除きたい。私は何をすべきか?私はちょうど多くのチェンジセットの後にそれらをマージするべきですか?Mercurial:2つのヘッドを持つ1つのブランチを扱う方法

+0

が重複する可能性が[複数のヘッドを除去する別の方法はありますか?](http://stackoverflow.com/questions/6867054/is-there -other-removal-multiple-heads-heads) –

答えて

28

ですから、この持っている:

o--o--o--A--B <- older unnecessary head 
     \ 
     1--2--3--4--5--6 <- newer ‘good’ head 

を...そしてあなたは100%必ず、絶対に、ABを必要としません。 が不明で、ABに救済可能なものがある場合は、ヘッドをマージして変更を結合してください。アーロンが言ったように、Mercurialはそれをうまく使っています。

  • は、古いヘッドを取り除く、または
  • ヘッドBを無視する二つのヘッドのダミーマージを実行します。

    は今、あなたは、2つのオプションがあります。

チェンジABは、他のリポジトリに存在している場合は、を制御し、例えばません他の人がABをリポジトリに引っ張った場合、またはABをパブリックリポジトリ(Bitbucketなど)にプッシュした場合は、ABを野生にリリースしてから削除できません。あなたはdummy mergeを実行する必要があります。マージするとき

$ hg up 6 
$ hg --config ui.merge=internal:local merge 

これはABからすべての変更を無視します。;

$ hg strip A 

(。stripを利用できるようにMQ拡張機能を有効に改訂Aと子孫を剥離):

一方、ABプライベートで、場合、あなたはどちらかstrip彼らすることができます

チェンジセットなしでリポジトリの新しいクローンを作成するAB

$ hg clone myrepo myrepo2-clone -r 6 

(のみ6をRevおよび祖先がクローンに追加しました。)の

+0

ダミーマージは私の問題を解決しました、ありがとう! – nrodic

-3

古いブランチで変更を保存する必要がある場合は、それらをマージする必要がありますが、それは問題ではありません。

+4

変更が必要ない場合はどうすればいいですか? – thoslin

6

変更をコミットするとヘッドが作成されます(既存のチェンジセットにチェンジセットを追加する)。それが同じチェンジセットで数回発生すると、いくつかのヘッドが作成されます。これは珍しいことでも悪いことでもありません。

通常の解決策は、それらをマージすることです。 Mercurialは非常にマージに優れています。結果はまだ手作業でコンパイルされて実行される可能性があります。

hg mergeを実行し、次にhg statushg diffを実行して、2つの間で変更された内容を確認してください。結果が気に入ったら、それをコミットしてください。あなたが好きではない場合は、updateのいずれかを使って作業領域を清掃してください。

頭を取り除くには、docs explain how to do that

MQを使用すると、2番目のヘッドを独立したブランチにすることもできます(これにより、頭に入れておくことができますが、気にすることはありません)。この回答を参照してください:How can I create a branch for a non-tip revision in Mercurial?

関連する問題