Git cherry-pick でコンフリクトが解決できない
cherry-pick は対象コミットの差分のみを現在ブランチに当て直す操作なので、merge / rebase と同じくコンフリクトが起こる。
手動で衝突を解消して git add → git cherry-pick --continue、やめるなら --abort で開始前に戻す。
公開: 更新:
要約
git cherry-pick のコンフリクトも基本は merge / rebase と同じ流れで解消する。<<<<<<< マーカーを潰し、git add → git cherry-pick --continue。やめたいときは git cherry-pick --abort で開始前の HEAD に戻る。
merge コミットを cherry-pick する場合だけ -m で親番号を指定する。
よくある原因
- 同じ行を別ブランチで既に変更している: cherry-pick はコミットの差分を再適用するため、当ブランチ側で同じ箇所が変わっていれば必ず衝突する。
- continue を忘れて commit: 通常通り
git commitしてしまい、cherry-pick の進行管理が壊れる。 - マーカー残しの add:
<<<<<<< HEAD/=======/>>>>>>>を消し忘れ、壊れた内容をgit addしてしまう。 - merge コミットを直 cherry-pick: 親が複数あるコミットには
-mで親番号指定が要る。
指定なしだとis a merge but no -m option was givenで止まる。
解決策
1. 衝突を解消して続行
git cherry-pick <sha>
# CONFLICT が出たら
$EDITOR path/to/file # マーカーを消し正しい内容にする
git add path/to/file
git cherry-pick --continuegit status で cherry-picking <sha> と衝突ファイルが確認できる。
2. 中止して元に戻す
git cherry-pick --abortcherry-pick 開始前の HEAD に戻る。--skip は当該コミットを飛ばして次に進む。
3. 範囲指定の cherry-pick
連続コミットをまとめて当てたい場合:
git cherry-pick A^..CA を含むのが A^..C、含まないのが A..C。
途中で衝突したら同じく --continue で進める(公式ドキュメント)。
4. merge コミットを cherry-pick
git cherry-pick -m 1 <merge-sha>-m 1 で「親 1 番からの差分を当てる」と明示する。
どちらの親が正しいかはマージ元のブランチに合わせる。
実行例
実際に上記の手順を alpine/git(Git 2.54.0)環境で動かすと、git cherry-pick は CONFLICT を検出して終了コード 1 で停止し、マーカー解消 → git add → git cherry-pick --continue の流れで終了コード 0 となりコミットが正常に適用された。
== versions ==
git version 2.54.0
== run ==
--- feature ブランチで line2 を変更 ---
--- master に戻り同じ line2 を別内容に変更 ---
--- git cherry-pick feature (CONFLICT を想定)---
Auto-merging f.txt
CONFLICT (content): Merge conflict in f.txt
error: could not apply 6ed928b... feature: edit line2
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
hint: Disable this message with "git config set advice.mergeConflict false"
cherry-pick の終了コード: 1
--- git status --short ---
UU f.txt
--- 解決: feature 側を採用 → add → cherry-pick --continue ---
Updated 1 path from the index
aster 5942520] feature: edit line2
Date: Tue Jun 16 02:56:41 2026 +0000
1 file changed, 1 insertion(+), 1 deletion(-)
continue の終了コード: 0
--- 解決後の f.txt と git log --oneline ---
line1
FEATURE
5942520 feature: edit line2
424d05d main: edit line2
2ee9c9a init— 2026-06-16 時点の出力