使用するという提案hg rebase
は誤解を招くと思います。MqMergePatchページには、これはMqMergeの修正版であると記載されています。これは、他の場所から取得した新しい変更セットの上に一連のパッチをリベースするための手法でした。
ただし、既に適用されているパッチ キューのコピーを保存し (これだけですhg qsave does
)、保存されたコピーを参照の一部として使用して、パッチ キューのリベースに影響を与える 3 方向のマージを行う必要があります。リベース拡張機能を有効にする前は、自分でそれを行っていました。次に、最初のパッチを新しい親にしたいチップ変更セットの上にリベースするだけでした。
ただし、基本的には、変更したパッチの上にパッチをリベースする必要があるため、それはあなたが望むものではありません。ただし、パッチ キューは線形であり、パッチが適用された変更セットにパッチ キューと並行する他の子がある場合にのみ、パッチをリベースできます。
--- A -------- patch1 --- patch2
\
\-- B
上記の状況では、パッチ キューは簡単にリベースできますがB
(hg rebase
したがって、 を使用することをお勧めしますhg rebase
)、それはあなたの状況とは関係ありません。
あなたの状況へのアプローチ
以下は、未適用のパッチと競合する未保存のローカル変更を含む適用済みパッチです。
--- A --- patch1 <patch2>
\
\-- [changes]
通常、拒否はほとんどないため、通常は弾丸をかじり、手動で拒否を処理します。拒否が多すぎて手動で処理できない状況にある場合、そもそもそれらを適切に整理していなかった可能性があります。
qsave
などを使用する手法が次の手法qpush -m
よりも好ましい場合は、廃止されたとしても、すぐに削除される可能性は低いです。qsave
3 方向マージ ツールを本当に利用したい場合、上記の状況をどのように処理するかを次に示します。
(TortoisHg 2.x ではまだパッチ キューをリベースできないため、これは私が時々行う finish-rebase-import の変形です。)
の代わりに、保存されていない変更を新しいパッチにするためqrefresh
に使用します。qnew
--- A --- patch1 --- patch1b <patch2>
これらのパッチを通常の変更セットに仕上げます。
--- A --- B --- C <patch2>
patch
完全に適用される変更セット( )に更新しB
、パッチを適用します。
--- A --- B --- patch2
\
\-- C
baseを使用してローカルとその他の間の競合を解決するために 3 方向マージが使用されるように、patch2
上にリベースします。C
patch2
C
B
(TortoiseHg 2.x では、patch2
リベースする前に終了してから、キューにインポートして戻す必要があります。)
--- A --- B --- C --- patch2
再びパッチとしてキューにインポートB
します。C
--- A --- patch1 --- patch1b --- patch2
ポップpatch2
しpatch1b
てから折りたたむ(名前を に変更patch1b
) :patch1
patch1new
--- A --- patch1new <patch2>
patch2
にきれいに適用されるようになりましたpatch1new
。