私は次のようなレポを持っています(または持っていることを目指しています!):
Master *-----*--*----------C---
\ \
Project1 \-*-------A----B----M2---A'--B'---
\ \ \
Project2 \----------*---M1------------M2---
マージM2を実行したいのですが、 AとBを完全に無視したいと思います。次に、マスターからの新しい変更の上に、必要に応じてA'とB'を手動で (例: チェリーピック) 再作成します。
Project2 は Master に基づいていますが、Project1 からの変更がマージされています。
望ましい結果:
ファイルに関して、ポイントM2をCの同一のコピーにしたいと考えています。
Project2 がそこからマージできるように、Project1 には独自の線形履歴が必要です。
コンテキスト: Master は Drupal の主要なコードベースです。Project1 は、いくつかのプロジェクトと共有したい特定のパッチを維持するために使用するブランチです。Project2 (およびその他の多く) は Project1 からマージされます。
私は考えました:
git merge -s recursive -X theirs master
これに関する問題は、AFAIKがtheirs
何かが競合する場合にのみ優先することです。したがって、A の変更が競合しない場合、それはM2に存在し、これは A' が不完全であることを意味します。git revert B..A ; git merge C
これは機能しますが、面倒で長い歴史が残ります。ありますが
git merge -s ours
、ないようですgit merge -s theirs
。git reset --hard C
これは、Project1 を Project2 にマージする可能性を (私が思うに) 壊すため、したくありません。もう 1 つの方法は、Project1 を C にリベースすることですが、これは Project2 にマージできないことを意味します。