git cherry-pick は、指定したコミットを現在のブランチに取り込む コマンドです。
マージ全体ではなく「特定の修正だけ」を別のブランチに反映したいときに使います。
例えば、main でバグ修正したコミットを release ブランチにも適用する場合などに便利です。
構文(Syntax)
git cherry-pick [オプション] <コミットハッシュ>...
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
-n / --no-commit | 変更を適用するがコミットは作らない | git cherry-pick -n a1b2c3d |
-e / --edit | コミットメッセージを編集してコミット | git cherry-pick -e a1b2c3d |
-x | 元コミットのハッシュをメッセージに追記 | git cherry-pick -x a1b2c3d |
-s | Signed-off-by 行を追加 | git cherry-pick -s a1b2c3d |
--continue | コンフリクト解消後に処理を続行 | git cherry-pick --continue |
--abort | コンフリクト発生時に処理を中止 | git cherry-pick --abort |
--quit | コンフリクト中の状態を残したまま終了 | git cherry-pick --quit |
<hash1>..<hash2> | 範囲指定で複数コミットを適用(hash1除く, hash2含む) | git cherry-pick a1b2c3d..d4e5f6g |
<hash1>^..<hash2> | 範囲指定で開始コミットも含める | git cherry-pick a1b2c3d^..d4e5f6g |
実行例
単一コミットを適用
git checkout feature-branch
git cherry-pick a1b2c3d
(a1b2c3d の変更を feature-branch にコピー)
複数コミットをまとめて適用
git cherry-pick a1b2c3d d4e5f6g
コミット範囲を適用
git cherry-pick a1b2c3d..d4e5f6g
(a1b2c3d の次から d4e5f6g までのコミットを適用)
コミットメッセージを編集して適用
git cherry-pick -e a1b2c3d
元コミットを明記して適用
git cherry-pick -x a1b2c3d
コミットメッセージに以下が追加される:
(cherry picked from commit a1b2c3d...)
コンフリクトが発生した場合
git cherry-pick a1b2c3d
# コンフリクトが発生したら修正
git add 修正ファイル
git cherry-pick --continue
中止したい場合
git cherry-pick --abort
エラー例(存在しないハッシュ指定)
git cherry-pick deadbeef
出力例:
fatal: bad revision 'deadbeef'
関連コマンド
git merge: ブランチ全体を統合git rebase -i: コミットの再配置・整理git revert: 過去のコミットを打ち消す新しいコミットを作成
備考
git cherry-pickは 履歴をコピーするコマンド であり、マージとは異なり元のブランチの履歴をそのまま持ってくるわけではありません。- バグ修正をリリースブランチやホットフィックスブランチに反映する場面でよく使われます。
- コンフリクトが起きやすい操作なので、
git logやgit showで事前に確認するのが推奨されます。
参考
- manページ: git-scm.com docs – git-cherry-pick
- Git Book: https://git-scm.com/book/

コメント