1

git の知識を少し更新する必要があるように感じます。たとえば、コミット A1 A2 .. AM .. AN のブランチがあるとします。ここで、AM は AN からかなり離れています (AM の後、マージを含む、実際には何百もの他のコミットがありました)。

一部のブランチ B は AM からチェックアウトされているため、このブランチは AM B1 B2 B3 B4 ... のようになります。

ここで、B を A にマージして、予想どおり、さまざまな競合を取得したいと考えています。予期しないことですが、この競合のほとんどすべてが、ブランチ B でまったく触れていないファイルに関連しています。

これらの競合はすべて、AM がかなり古いブランチであるという事実によるものだとしか思えません。私の質問は、B を A にマージする最良の方法は何ですか? 私が考えることができる最善の戦略は、ブランチ A1 A2 .... AM B1 B2 .... AN を作成し、これを A1 ... AN にマージして戻すことです。どうすればこれを達成できますか?私もしようとする必要がありますか?gitマージがどのように行われるかについての私の理解にあるかもしれませんが、何か基本的なことが欠けていますか?

4

1 に答える 1

2

本当に、あなたはそれらの対立を特定して理解する必要があります。これはプロセスの問題ではなく、ツリーに問題があります。あなたが主張するように、「AM」が両方のブランチでHEADの祖先であり、「AM..AN」が「B1..B4」で変更されたファイルに触れないことをコミットする場合、それらのファイルで競合が発生することはありません。 。あなたがいるという事実は、おそらくファイルを変更したマージコミットがそこにあるか、「AM」(単なる別のコミットではなく実際のコミット)のようにリベースが行われたために、ツリーの状態について誤っていることを意味します同じメッセージでコミットする)は、実際には両方のブランチの共有の祖先ではありません。

于 2013-02-05T16:41:30.943 に答える