1. ホーム
  2. git

[解決済み] git cherry-pickが「...38c74dはマージされましたが、-mオプションは指定されませんでした」と言う。

2022-03-14 23:07:54

質問

masterブランチにいくつか変更を加え、それを上流に持ってきたいと思います。チェリーピックすると、以下のコミットが表示されます。しかし、fd9f578で引っかかります。

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

gitは何を伝えようとしているのでしょうか、そしてここで使うべきはcherry-pickなのでしょうか? masterブランチは、上流ブランチで変更されたファイルの変更を含んでいるので、いくつかのマージの衝突が発生すると思います。どの変更がどこに必要かはわかっています。

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

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つのコミットが2つ以上の親を持つ場合、それは2つ以上の差分も表しています - どの差分を適用すべきでしょうか?

あなたはチェリーピックをしようとしている fd9f578 は、2 つの親を持つマージでした。そこで、チェリーピックコマンドに、差分を計算する対象がどちらなのかを -m オプションを使用します。例えば git cherry-pick -m 1 fd9f578 を指定すると、親1がベースとして使用されます。

あなたの特定の状況について確かなことを言うことはできませんが、このような場合は git merge の代わりに git cherry-pick は一般的に推奨されます。マージコミットをチェリーピックするとき、それは すべて を指定した場合、指定しなかった親で行われた変更を -m をその 1つのコミット . 履歴をすべて失い、すべての差分も一緒になってしまいます。あなたが決めることです。