非常に分岐した Git ブランチを一緒にマージしたいと考えています。数百の競合があるため、これは大変な作業になります。
おそらく他の人も私を助けて、このマージに取り組むことができるように、最善の方法は何でしょうか?
通常、私は「git merge ...」を実行してから、すべての競合を調べて解決し、コミットします。しかし、それはそのときだけローカルです。
競合解決の作業には数日かかる場合があります。作業中に、変更内容をオンラインにしたいと考えています。
最近この問題に直面したとき、分岐したマージ予定のブランチを最後の共通コミット ( で見つけたgit cherry -v upstreambranch divergedbranch
) に巻き戻し、マージしたくないすべてのコミットを削除することにしました。(つまり、異なるハッシュを使用している場合、マスターブランチにすでに存在するコミット。)
コミットのリストから
git rebase -i --onto lastcommoncommit upstreambranch divergedbranch
にリストされていたすべてのコミットを削除しました
git log lastcommoncommit..upstreambranch
この結果、上流ブランチにまだ含まれていないコミットのみを含む、クリーンではあるが少し時代遅れのトピック ブランチが作成されます。
この時点から、主に次の 2 つの方法があります。
git cherry-pick
マージされていない最も古いコミットから始めて、outdatedbutcleantopic ブランチから上流ブランチの HEAD にコミットできます。git rebase --onto upstreambranch@{4 weeks ago} upstreambranch
rebase/cherry-pick セッションが終了したら、変更を統合ブランチにプッシュし、他の誰かが同じプロセスを引き続き使用できるようにします。
他の人に助けてもらいたい場合は、それらのブランチをアクセス可能なサーバーにリモート ブランチとして配置する必要があります。
一度にすべての作業を行う必要はありません。ブランチはある時点で分岐しました。したがって、そこから作業を開始しますが、コミットを徐々にマージします。
たとえば、master ブランチと b という非常に異なるブランチがあるとします。
マスターに切り替えて行うgit merge b
と、大量の競合が発生します。
それで、マスターと b が分離した履歴を調べ始めます。次に、たとえばbブランチの3番目のコミットを取り、それをマージします
git merge <sha_in_b_branch>
いくつかの競合しか得られません。それらを解決し、コミットし、変更をリモートブランチにプッシュすると、他の誰かが続行できます. 次のいくつかのコミットを取得し、競合を解決し、プッシュをコミットします。b ブランチの先頭に到達するまで、このように続けます。