2つの異なるgitブランチがあります。 1つは、開発中です(Branch1)。
他のブランチでは、いくつかのPoC作業が行われています(Branch2)。次に、Branch1からBranch2への変更をチェリーピックして、Branch2が最新になるようにします。
現在、4つまたは5つの変更をチェリーピッキングした後、マージの競合が発生しており、さらにチェリーピッキングを進めることはできません。
次のチェリーピックに進む前にすべての競合を解決する必要がありますか、またはすべての変更をチェリーピックするまで競合解決を延期できますか?
さらに、この場合、チェリーピックまたはブランチマージを行うことをお勧めしますか?
次のチェリーピックに進む前に、すべての競合を解決する必要があります
はい、少なくとも標準のgitセットアップでは。競合がある間はチェリーピックできません。
さらに、一般的に、競合はあなたが持っているほど解決するのが難しくなりますので、一般的に一つずつ解決する方が良いです。
とは言っても、can複数のコミットを一度に選択することができます。例参照 複数のコミットをチェリーピックする方法 。これは、たとえば、一部のコミットが以前のコミットを元に戻す場合に役立ちます。その後、一度にすべてを選択する必要があるため、後のコミットで元に戻された変更の競合を解決する必要はありません。
さらに、この場合、チェリーピックまたはブランチマージを行うことをお勧めしますか?
一般に、メインの開発で機能ブランチを最新に保ちたい場合は、マスター->機能ブランチをマージするだけです。主な利点は、後でマージ機能のブランチ->マスターを作成する方がはるかに簡単になることです。
チェリーピッキングは、機能ブランチからmasterの一部の変更を除外する必要がある場合にのみ役立ちます。それでも、これは痛いので、私はそれを避けようとします。
続行する前に:
適切なmergetoolをインストールします。 Linuxでは、meldを使用することを強くお勧めします。
Sudo apt-get install meld
Mergetoolを構成します。
git config --global merge.tool meld
次に、次の方法で繰り返します。
git cherry-pick ....
git mergetool
git cherry-pick --continue
また、@ claudioが言ったことを完了するために、チェリーピッキングのときに マージ戦略 を使用することもできます。
だから、あなたはこのような何かをすることができますgit cherry-pick --strategy=recursive -X theirs commit
または git cherry-pick --strategy=recursive -X ours commit