2011-02-09 7 views
16

単純な例を考えてみましょう:私はデフォルトのブランチで作業しており、ローカルでコミットされたチェンジセットをいくつか持っています。私は隔離されたローカルリポジトリで数日間働いていたので、結果をマスターに戻す前にマージするための変更がかなりあります。Mercurialで方向をマージしますか?

default ---o-o-o-o-o-o-o-o-o-o-o (pulled stuff) 
      \ 
      o----o------------o (my stuff) 

私は今、2つのことができます。

オプション#1:

hg pull 
hg merge 

結果#1:

default ---o-o-o-o-o-o-o-o-o-o-o 
      \     \ 
      o----o------------o-O 

オプション#2:

hg pull 
hg update 
hg merge 

結果#2:

default ---o-o-o-o-o-o-o-o-o-o-o-O 
      \     /
      o----o------------o 

これらの2つの結果は私と同じですが、実際にはオプション2の方が小さなチェンジセットになっているようです(私の少数のメインラインの変更をすべて適用するのではなく、

私の質問は次のとおりですか?マージの方向性に気を付けるべきですか?私はこれをすればスペースを節約できますか? (マージ後にhg log --patch --rev tipを実行すると、それが示唆されます)

答えて

14

これらは(実質的に)同一です。 hg log --patch --rev Xの出力サイズには違いがあります。これは、logは結果の差分と(任意に)その「左」の親(正式なp1)を表示しますが、それはどのように格納されているのかです(Mercurialはpatch/diffベース)、それは今どのように計算されているのですか(p1、p2、および最近の共通の祖先がすべ​​て使用されています)。

唯一の違いは、名前付きブランチを使用している場合、ブランチ名は左側の親のブランチ名になります。

2

ブックマークを使用している場合でも違いがあります。マージを行うとき、あなたがいるブランチは変更を受け取っているブランチであるため、新しいチェンジセットはそのブランチの一部になります。あなたはこのような状況を持っているSupose:あなたは改訂195に改訂200をマージする場合は、ブックマークを持って、同じ支店で新しいチェンジセットを生成しているよう

default ---o-o-o-o-o-o-o-o-o-o-o -- Head: Rev 200 
      \ 
      o----o------------o -- Head: Rev 195, Bookmark: my-stuff 

は、ブックマークmy-stuffは、201をREVに移ります。

一方、195を200にマージすると、ブックマークを持たないブランチにチェンジセットが生成されます。 my-stuffのブックマークはRev 195に残ります。

+1

[Hg-Git](http://hg-git.github.com/)を使用している場合、これは仮想Gitブランチの位置を追跡するため特に重要ですブックマークを使用して間違った方法でマージすれば、Gitブランチのブックマークは移動せず、プッシュする必要はありません。 –

+0

195に200をマージすると、ブックマークを201に移動することが保証されません。もしあなたが 'hg update my-stuff; hg merge 200 'を実行しますが、' hg update 195; hg merge 200'はそうしません。ブックマーク名で更新すると*アクティブになります。 –

関連する問題