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 となりコミットが正常に適用された。
$ git cherry-pick feature
Auto-merging f.txt
CONFLICT (content): Merge conflict in f.txt
error: could not apply 67a3b15... 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$ git checkout --theirs f.txt
Updated 1 path from the index$ git add f.txt$ git cherry-pick --continue
[master 6869f43] feature: edit line2
Date: Sun Aug 2 08:42:36 2026 +0000
1 file changed, 1 insertion(+), 1 deletion(-)
continue の終了コード: 0$ cat f.txt
line1
FEATURE$ git log --oneline
6869f43 feature: edit line2
6945f3b main: edit line2
5ba8aa1 init— 2026-08-02 時点の出力