git cherry-pick で「...38c74d はマージですが、-m オプションが指定されていません」と表示される 質問する

git cherry-pick で「...38c74d はマージですが、-m オプションが指定されていません」と表示される 質問する

マスター ブランチにいくつか変更を加えたので、それをアップストリームに持ち込みたいと考えています。次のコミットをチェリー ピックすると、git が次のように表示する fd9f578 で停止してしまいます。

$ git cherry-pick fd9f578
fatal: Commit fd9f57850f6b94b7906e5bbe51a0d75bf638c74d is a merge but no -m option was given.

Git は私に何を伝えようとしているのでしょうか。また、ここでは cherry-pick を使用するのが適切でしょうか。マスター ブランチには、上流ブランチで変更されたファイルへの変更が含まれているため、マージの競合が発生することは間違いありませんが、解決するのはそれほど難しくありません。どこにどのような変更が必要かはわかっています。

これらはアップストリームに持ち込みたいコミットです。

e7d4cff added some comments...
23e6d2a moved static strings...
44cc65a incorporated test ...
40b83d5 whoops delete whitspace...
24f8a50 implemented global.c...
43651c3 cleaned up ...
068b2fe cleaned up version.c ...
fd9f578 Merge branch 'master' of ssh://extgit/git/sessions_common
4172caa cleaned up comments in sessions.c ...

ベストアンサー1

チェリーピックの動作は、変更セットが表す diff (その時点での作業ツリーとその親の作業ツリーの差異) を取得し、それを現在のブランチに適用することによって行われます。

したがって、コミットに 2 つ以上の親がある場合、それは 2 つ以上の diff も表します。どれを適用すればよいでしょうか?

2 つの親を持つマージであるcherry pick を試行していますfd9f578。そのため、オプションを使用して、どの親に対して diff を計算するかを cherry-pick コマンドに指示する必要があります-m。たとえば、git cherry-pick -m 1 fd9f578親 1 をベースとして使用します。

親 1 は「最初の親」、親 2 は「2 番目の親」などです。順序はコミットにリストされている順序です (git show などで表示されます)。

あなたの特定の状況については断言できませんが、git mergeの代わりにを使用するのgit cherry-pickが一般的には賢明です。マージコミットをチェリーピックすると、指定しなかった親で行われたすべての-m変更がその1 つのコミットにまとめられます。すべての履歴が失われ、すべての diff がまとめられます。あなたの判断で。

おすすめ記事