33

私は、すぐには発見されなかった主要な問題を伴う機能を導入するコミットを持っているプロジェクトに取り組んでいます。それに続く作業を続けながら、そのリビジョンを完全に削除したいのですが、この3ウェイマージに頭を悩ませるのに苦労しています。これが私のプロジェクトの簡略化されたグラフです。

oチェンジセット:134:7f81764aa03a
| タグ:ヒント
| 親:128:451d8a19edea
| 概要:バックアウトされたチェンジセット451d8a19edea
|
| @チェンジセット:133:5eefa40e2a29
| | 要約:(変更を維持する必要があります)
| |
*snip3コミット*
| oチェンジセット:129:5f6182a97d40
| /要約:(変更を維持する必要があります)
|
oチェンジセット:128:451d8a19edea
| 要約:(大きな問題を引き起こした変更)
|
oチェンジセット:127:4f26dc55455d
| 要約:(要約はこの質問には関係ありません)

これを正しく理解していれば、r127とr134はまったく同じです。私hg up -C -r 133が実行するhg mergeと、Meldがポップアップし、私のファイルの1つであるローカル、ベース、その他の3つの形式が表示されます。ローカルはr133のようですが、「ベース」と「その他」の意味に頭を悩ませるのに苦労しています。

4

2 に答える 2

35

ローカルはr133です

その他はr134です

ベースはr128(r133とr 134の両方に共通の祖先)です。

3ウェイマージを実行すると、3つすべてを比較して、何をどこから取得するかを決定するのに役立ちます。他のリビジョンでどのような変更があり、共通の祖先がどのように見えるかを確認することで、何を保持し、何を変更するかについて、より多くの情報に基づいた決定を下すことができます。

于 2010-10-02T16:58:23.490 に答える
11

あなたの質問は本当に紛らわしいですが、ここに役立つ情報がいくつかあります。

  • ベースとは?

Base は、現在チェックアウトして作業しているリビジョンの未修正バージョンです。他の変更が分岐した可能性があります (現在のローカルとベースの間にリビジョンがある可能性があります!)。その後、他のフォークが流用されていない最も近いリビジョン(同じ親)(あなたの場合はr128)

  • 頭とは?

Head は、バージョン管理における最新のリビジョンです。1 つのコピーだけを単独で作業する場合、それはおそらくベースになります。しかし、同僚が同じファイルを変更してバージョン管理にチェックインした可能性があります。その場合、ヘッドはベースよりも遅れています。

  • ローカルとは?

ローカルは変更されたバージョンです(あなたの場合はr133)

  • その他とは?

その他は、ベースを親として持ついくつかのフォーク/ブランチです(あなたの場合はr134)

  • 3 方向マージはどのように機能しますか?

3 方向のマージは (少なくともメルドでは) 階層的に機能します。通常、次のように左から右に:

ローカル > ベース > その他 / ヘッド

local/base は、変更したものだけなので、ほとんど簡単です

次に、変更をヘッドリビジョンまたは同僚のリビジョンなどにマージできます。

複数の他の/ヘッド リビジョンが存在する可能性がありますが、マージするのはあなたの仕事ではないため、3 つ以上の方法で比較することは意味がありません。

于 2010-10-02T17:05:22.117 に答える