マージコミットには2つの親があり、gitはマージのどちら側をメインラインと見なすべきかわからないため、 gitは親番号(-m
)を指定するように要求しています。したがって、このオプションを使用すると、メインラインの親番号(1から開始)とチェリーピックを指定して、指定した親に関連する変更を再生できます。
コミットの親を見つけるには、次のいずれかを試してください。
git show --pretty=raw <merge_commit>
また:
git cat-file -p <merge_commit>
または、GUIの可視性を高めるために、次のことを試してください。
gitk <merge_commit>
結果として、次のようなものが得られるはずです。
commit fc70b1e9f940a6b511cbf86fe20293b181fb7821
tree 8d2ed6b21f074725db4f90e6aca1ebda6bc5d050
parent 54d59bedb9228fbbb9d645b977173009647a08a9 = <parent1_commit>
parent 80f1016b327cd8482a3855ade89a41ffab64a792 = <parent2_commit>
次に、次の方法で各親の詳細を確認します。
git show <parent1_or_2_commit>
追加--stat
して、変更されたファイルのリストを表示します。
または、次のコマンドを使用して、変更を比較します(上記の親に基づく)。
git diff <parent1_or_2_commit>..<commit>
追加--stat
して、変更されたファイルのリストを表示します。
または、結合された差分を使用して、次の方法で2つの親を比較します。
git diff --cc <parent1_commit>
git diff --cc <parent2_commit>
次に、チェリーピックの1から始まる親番号を指定します。例:
git cherry-pick -m 1 <merge_commit>
次に、実行git status
して何が起こっているかを確認します。まだ変更をコミットしたくない場合は、-n
何が起こるかを確認するオプションを追加してください。次に、満足できない場合は、HEAD(git reset HEAD --hard
)にリセットします。gitの競合が発生する場合は、おそらく手動で解決するか、マージ戦略(-X
)を指定する必要があります。Gitでマージの競合を解決する方法を参照してください。