4

非常に分岐した Git ブランチを一緒にマージしたいと考えています。数百の競合があるため、これは大変な作業になります。

おそらく他の人も私を助けて、このマージに取り組むことができるように、最善の方法は何でしょうか?

通常、私は「git merge ...」を実行してから、すべての競合を調べて解決し、コミットします。しかし、それはそのときだけローカルです。

競合解決の作業には数日かかる場合があります。作業中に、変更内容をオンラインにしたいと考えています。

4

2 に答える 2

2

最近この問題に直面したとき、分岐したマージ予定のブランチを最後の共通コミット ( で見つけたgit cherry -v upstreambranch divergedbranch) に巻き戻し、マージしたくないすべてのコミットを削除することにしました。(つまり、異なるハッシュを使用している場合、マスターブランチにすでに存在するコミット。)

コミットのリストから

git rebase -i --onto lastcommoncommit upstreambranch divergedbranch

にリストされていたすべてのコミットを削除しました

git log lastcommoncommit..upstreambranch

この結果、上流ブランチにまだ含まれていないコミットのみを含む、クリーンではあるが少し時代遅れのトピック ブランチが作成されます。

この時点から、主に次の 2 つの方法があります。

  1. git cherry-pickマージされていない最も古いコミットから始めて、outdatedbutcleantopic ブランチから上流ブランチの HEAD にコミットできます。
  2. outdatedbutcleantopicbranch を、upstreambranch の古い状態にリベースしますgit rebase --onto upstreambranch@{4 weeks ago} upstreambranch

rebase/cherry-pick セッションが終了したら、変更を統合ブランチにプッシュし、他の誰かが同じプロセスを引き続き使用できるようにします。

于 2010-03-10T17:23:04.790 に答える
2

他の人に助けてもらいたい場合は、それらのブランチをアクセス可能なサーバーにリモート ブランチとして配置する必要があります。

一度にすべての作業を行う必要はありません。ブランチはある時点で分岐しました。したがって、そこから作業を開始しますが、コミットを徐々にマージします。

たとえば、master ブランチと b という非常に異なるブランチがあるとします。

マスターに切り替えて行うgit merge bと、大量の競合が発生します。

それで、マスターと b が分離した履歴を調べ始めます。次に、たとえばbブランチの3番目のコミットを取り、それをマージします

git merge <sha_in_b_branch>

いくつかの競合しか得られません。それらを解決し、コミットし、変更をリモートブランチにプッシュすると、他の誰かが続行できます. 次のいくつかのコミットを取得し、競合を解決し、プッシュをコミットします。b ブランチの先頭に到達するまで、このように続けます。

于 2010-03-05T08:13:58.507 に答える