web-dev-qa-db-ja.com

Git Cherry-Pickと競合

2つの異なるgitブランチがあります。 1つは、開発中です(Branch1)。

他のブランチでは、いくつかのPoC作業が行われています(Branch2)。次に、Branch1からBranch2への変更をチェリーピックして、Branch2が最新になるようにします。

現在、4つまたは5つの変更をチェリーピッキングした後、マージの競合が発生しており、さらにチェリーピッキングを進めることはできません。

次のチェリーピックに進む前にすべての競合を解決する必要がありますか、またはすべての変更をチェリーピックするまで競合解決を延期できますか?

さらに、この場合、チェリーピックまたはブランチマージを行うことをお勧めしますか?

40
Abhinav

次のチェリーピックに進む前に、すべての競合を解決する必要があります

はい、少なくとも標準のgitセットアップでは。競合がある間はチェリーピックできません。

さらに、一般的に、競合はあなたが持っているほど解決するのが難しくなりますので、一般的に一つずつ解決する方が良いです。

とは言っても、can複数のコミットを一度に選択することができます。例参照 複数のコミットをチェリーピックする方法 。これは、たとえば、一部のコミットが以前のコミットを元に戻す場合に役立ちます。その後、一度にすべてを選択する必要があるため、後のコミットで元に戻された変更の競​​合を解決する必要はありません。

さらに、この場合、チェリーピックまたはブランチマージを行うことをお勧めしますか?

一般に、メインの開発で機能ブランチを最新に保ちたい場合は、マスター->機能ブランチをマージするだけです。主な利点は、後でマージ機能のブランチ->マスターを作成する方がはるかに簡単になることです。

チェリーピッキングは、機能ブランチからmasterの一部の変更を除外する必要がある場合にのみ役立ちます。それでも、これは痛いので、私はそれを避けようとします。

28
sleske

続行する前に:

  • 適切なmergetoolをインストールします。 Linuxでは、meldを使用することを強くお勧めします。

    Sudo apt-get install meld
    
  • Mergetoolを構成します。

    git config --global merge.tool meld
    

次に、次の方法で繰り返します。

git cherry-pick ....
git mergetool
git cherry-pick --continue
54
Claudio

また、@ claudioが言ったことを完了するために、チェリーピッキングのときに マージ戦略 を使用することもできます。

だから、あなたはこのような何かをすることができますgit cherry-pick --strategy=recursive -X theirs commit または git cherry-pick --strategy=recursive -X ours commit

1
jeremie