git cherry-pick
特定のコミットだけを選んで、現在のブランチに取り込みます。ブランチ全体をマージせず、必要な変更だけを持ってきたいときに使います。
構文
git cherry-pick [options] <commit>... git cherry-pick は、別のブランチにある特定のコミットだけを選んで、現在のブランチに取り込むコマンドです。ブランチ全体を merge や rebase するほどではないが、その中の1つの修正だけがほしい、というときに使います。
基本的な使い方
# 対象のコミットハッシュを他ブランチの log で確認
git log other-branch --oneline
# 現在のブランチにそのコミットだけを取り込む
git cherry-pick a1b2c3d
【取り込み前】
main: A → B
other-branch: A → B → C → D
【git cherry-pick D 実行後】
main: A → B → D'
other-branch: A → B → C → D
D' は D と同じ変更内容を持つ新しいコミットとして main に追加されます。コミットハッシュは変わります。
よくある使いどころ:hotfix を複数ブランチに反映する
# hotfix ブランチで緊急修正
git switch hotfix/urgent-bug
git commit -m "認証バグを修正"
# コミットハッシュ: f9e8d7c
# main に取り込む
git switch main
git cherry-pick f9e8d7c
# リリースブランチにも同じ修正を取り込む
git switch release/v1.2
git cherry-pick f9e8d7c
複数のコミットをまとめて取り込む
# 複数のコミットを個別に取り込む(それぞれ別コミットになる)
git cherry-pick a1b2c3d e4f5g6h
# 範囲指定(a1b2c3d を含まず、e4f5g6h までを取り込む)
git cherry-pick a1b2c3d..e4f5g6h
# コミットを分けずに、1つのコミットにまとめて取り込む
git cherry-pick -n a1b2c3d e4f5g6h
git commit -m "2つの修正をまとめて取り込み"
コンフリクトの解決
git cherry-pick a1b2c3d
# CONFLICT (content): Merge conflict in src/index.js
# ファイルを編集してコンフリクトを解決
git add src/index.js
git cherry-pick --continue
# やめたい場合
git cherry-pick --abort
取り込み元を記録する
# コミットメッセージ末尾に "(cherry picked from commit a1b2c3d)" を自動追記
git cherry-pick -x a1b2c3d
チームで複数ブランチに同じ修正を展開する場合、-x を使うと後から「このコミットはどこから来たか」を追跡しやすくなります。
git rebase との違い
| コマンド | 対象 | 用途 |
|---|---|---|
git rebase | ブランチ全体のコミット群 | ブランチの土台を丸ごと付け替える |
git cherry-pick | 個別の1つ・複数コミット | 特定の変更だけをピンポイントで別ブランチに反映する |