3つの方法は、水銀/メルドでどのように機能しますか?
-
27-09-2019 - |
質問
私は、すぐに発見されなかった大きな問題を抱えた機能を導入するコミットメントを持っているプロジェクトに取り組んでいます。今、私はそれに続いて作業を維持しながらその改訂を完全に削除したいと思っていますが、私はこの3つの方法で頭を包むのに苦労しています。これが私のプロジェクトの簡略化されたグラフです。
o changeset: 134:7f81764aa03a | tag: tip | parent: 128:451d8a19edea | summary: Backed out changeset 451d8a19edea | | @ changeset: 133:5eefa40e2a29 | | summary: (Change I need to keep keep) | | *snip 3 commits* | o changeset: 129:5f6182a97d40 |/ summary: (Change I need to keep keep) | o changeset: 128:451d8a19edea | summary: (Change that introduced a major problem) | o changeset: 127:4f26dc55455d | summary: (summary doesn't matter for this question)
これを正しく理解していれば、R127とR134はまったく同じです。私 hg up -C -r 133
そして、実行します hg merge
, 、メルドは、ローカル、ベース、その他の3つのフォームの1つのファイルでポップアップします。ローカルはR133のように見えますが、「ベース」と「その他」の意味を頭に包むのに苦労しています。
解決
ローカル R133です
他の R134です
ベース R128(R133とR 134の両方の共通の祖先)
3ウェイマージを実行すると、それらの3つすべてを一緒に比較して、何をどこから取るかを決定するのに役立ちます。他の改訂にどのような変化があり、共通の祖先がどのように見えるかを確認することで、何を維持するか、何を変更するかについて、はるかに情報に基づいた決定を下すことができます。
他のヒント
あなたの質問は本当に混乱していますが、ここにあなたを助けるかもしれないいくつかの情報があります。
- ベースとは何ですか?
ベースは、現在チェックアウトして取り組んでいる改訂の未修正バージョンです。おそらく他の変更が分岐している場合(現在のローカルとベースの間に改訂を行うことができます!)。他のフォークが後で転用していない最寄りの改訂(同じ親)(あなたの場合はR128)
- 頭とは?
ヘッドはバージョンコントロールの最新の改訂です。 1つのコピーのみで一人で作業する場合、おそらくベースになります。しかし、同僚が同じファイルを変更し、それをバージョンコントロールにチェックした可能性があります。その後、ヘッドはベースよりも遅いです。
- 地元とは何ですか?
ローカルはあなたの変更されたバージョンです(あなたの場合はR133)
- 他は何ですか?
その他は、親としての基盤を持ついくつかのフォーク/ブランチです(あなたの場合はR134)
- 3ウェイマージはどのように機能しますか?
3 Way Merge Works(少なくともMELDで)階層的に。通常、このように左から右へ:
ローカル>ベース>その他 /ヘッド
ローカル/ベースは、あなたが変更したものだけなので、ほとんど些細なことです
次に、変更をヘッドリビジョン、または同僚の1人などにマージできます。
複数の他の/ヘッドリビジョンがある場合がありますが、合併するのはあなたの仕事ではないため、3つ以上の比較は意味がありません。