「別のブランチで作った機能の一部だけ、今のブランチに取り込みたい」
そんな場面で役立つのが git cherry-pick コマンドです。
ブランチ全体をマージしなくても、特定のコミットだけをピンポイントで取り込めるのがcherry-pickの特徴です。この記事では、初心者でもわかるようにcherry-pickの使い方を解説します。

cherry-pickは「ブランチ丸ごとではなく、必要なコミットだけを取ってくる」コマンドです!
- この記事はこんな人にオススメ
-
- git cherry-pickの使い方を知りたい人
- 特定のコミットだけを別ブランチに反映したい人
- mergeとcherry-pickの使い分けがわからない人
git cherry-pickとは?
わかりやすい例えで理解する
cherry-pickは「さくらんぼ狩り」が名前の由来です。木(ブランチ)全体を取るのではなく、気に入ったさくらんぼ(コミット)だけを摘み取るイメージです。
たとえばこんな状況を考えてみましょう:
main ブランチ:
A → B → C
feature ブランチ(mainから分岐):
A → B → D → E → F
feature ブランチで作業した E(バグ修正)だけを main に取り込みたい場合、cherry-pickを使えばコミット E だけをピンポイントで main に適用できます。
main ブランチ(cherry-pick後):
A → B → C → E'
E' は E と同じ変更内容を持つ、新しいコミットです。
mergeとの違い
| 項目 | git merge | git cherry-pick |
|---|---|---|
| 取り込む範囲 | ブランチ全体 | 指定したコミットのみ |
| 使い方 | ブランチの統合 | 特定の変更だけ欲しいとき |
| 履歴への影響 | マージコミットが作られる | 新しいコミットが追加される |
| 難易度 | 低い | やや高い |

「この機能丸ごと取り込みたい」ならmerge、「あのコミットだけ欲しい」ならcherry-pickという使い分けが基本です。
git cherry-pickの基本的な使い方
コミットIDを確認する
まず、取り込みたいコミットのIDを確認します。
# コミット履歴を見る
git log --oneline
# 出力例:
# f3a8b2c ログインのバグを修正
# a1c9d4e ユーザー登録機能を追加
# 8b7e3f1 デザインを調整
# 2d4f6a8 初期設定
1つのコミットをcherry-pickする
git cherry-pick <コミットID>
例:f3a8b2c のコミットを現在のブランチに取り込む
git cherry-pick f3a8b2c
これだけで完了です。コミット f3a8b2c と同じ変更が、現在のブランチに新しいコミットとして追加されます。
実際の操作の流れ
# 1. mainブランチに切り替え
git checkout main
# 2. featureブランチのコミット履歴を確認
git log --oneline feature
# 3. 取り込みたいコミットIDを確認してcherry-pick
git cherry-pick f3a8b2c
# 4. 結果を確認
git log --oneline

コミットIDは最初の7文字程度で大丈夫です。全部入力しなくてもOKです!
よく使うオプション
-n / –no-commit:コミットせずに変更だけ取り込む
git cherry-pick -n f3a8b2c
cherry-pickの変更をステージングエリアに乗せた状態で止まります。自分でコミットメッセージを書きたい場合や、複数の変更をまとめてコミットしたい場合に便利です。
# -n でcherry-pick後、自分でコミット
git cherry-pick -n f3a8b2c
git cherry-pick -n a1c9d4e
git commit -m "バグ修正とユーザー登録機能を取り込み"
-x:元のコミットIDをコミットメッセージに記録する
git cherry-pick -x f3a8b2c
コミットメッセージに (cherry picked from commit f3a8b2c...) という一文が自動追加されます。どこから取り込んだか追跡したい場合に便利です。
複数のコミットをまとめてcherry-pickする
# 複数指定
git cherry-pick f3a8b2c a1c9d4e 8b7e3f1
# 範囲指定(A..B で「AのあとからBまで」を取り込む)
git cherry-pick 8b7e3f1..f3a8b2c
- 範囲指定の注意
-
- `A..B` の場合、**Aのコミット自体は含まれません**。Aも含めたい場合は `A^..B` と書きます。
- “`bash
- # AとA以降〜Bまで全て取り込む場合
- git cherry-pick 8b7e3f1^..f3a8b2c
- “`
–abort:cherry-pickを中止する
コンフリクトが発生した場合など、cherry-pickをなかったことにしたい場合:
git cherry-pick --abort
–continue:コンフリクト解消後に再開する
# コンフリクト解消後
git add .
git cherry-pick --continue

`-n` オプションはよく使います。「変更だけ取り込んで、コミットは自分でする」という柔軟な使い方ができます。
実際のユースケース
ユースケース1:バグ修正を別ブランチに反映する
開発ブランチで見つけたバグ修正を、リリース済みのブランチにも反映したい場合:
# developブランチのバグ修正コミットを確認
git log --oneline develop
# releaseブランチに切り替え
git checkout release/v1.2
# バグ修正コミットだけをcherry-pick
git cherry-pick abc1234
これはcherry-pickの最もよくある使い方です。
ユースケース2:誤ったブランチにコミットしてしまった
本当は feature ブランチでやるべき作業を main ブランチでコミットしてしまった場合:
# mainにある誤ったコミットのIDを確認
git log --oneline main
# featureブランチに切り替え
git checkout feature
# 誤ったコミットをfeatureにcherry-pick
git cherry-pick abc1234
# mainブランチに戻って、誤ったコミットを取り消す
git checkout main
git revert abc1234
ユースケース3:複数コミットをひとつにまとめて取り込む
# -n で変更だけを順番に取り込む
git cherry-pick -n abc1234
git cherry-pick -n def5678
git cherry-pick -n ghi9012
# まとめてコミット
git commit -m "〇〇機能の実装"
コンフリクトが発生した場合の対処
cherry-pick中にコンフリクトが起きると、処理が一時停止します。
# コンフリクトが起きると以下のようなメッセージが出る
# CONFLICT (content): Merge conflict in src/login.js
# error: could not apply abc1234...
# 1. コンフリクトしているファイルを確認
git status
# 2. ファイルを開いてコンフリクトを解消
# <div class="speech-wrap sb-id-12 sbs-stn sbp-l sbis-cb cf">
<div class="speech-person">
<figure class="speech-icon"><img class="speech-icon-image" src="https://working-class-hero.net/wp-content/uploads/2023/10/cropped-ICON.jpg" alt="<<<<" width="80" height="80" /></figure>
<div class="speech-name"><<<<</div>
</div>
<div class="speech-balloon">
<p># (現在のブランチの内容)</p>
<p># =======</p>
<p># (cherry-pickしようとしている内容)</p>
<p>#</p>
</div>
</div>>>>> abc1234
# 3. 解消後にステージング
git add src/login.js
# 4. cherry-pickを続行
git cherry-pick --continue
# 中止したい場合
git cherry-pick --abort

コンフリクトが起きても焦らず。`git status` で確認してから、ファイルを開いて修正するだけです!
cherry-pickを使うべき場面・使わない方がいい場面
使うべき場面
- cherry-pickが向いている場面
-
- バグ修正コミットを別ブランチにも反映したい
- 誤ったブランチにコミットしてしまった
- 他のブランチの特定機能だけを取り込みたい
- hotfix(緊急修正)を複数のブランチに適用したい
使わない方がいい場面
- cherry-pickを多用するのは危険なケース
-
- **依存関係があるコミットをバラバラに取り込む場合**:コミットAの前にコミットBが必要な場合、Aだけを取り込んでも動かない
- **ブランチ全体を統合したい場合**:その場合はmergeかrebaseを使う
- **同じ変更を何度も適用したい場合**:重複コミットが積み重なって履歴が汚くなる
| やりたいこと | 適切なコマンド |
|---|---|
| ブランチ全体を統合 | git merge |
| 特定コミットだけ取り込む | git cherry-pick |
| コミット履歴をきれいにする | git rebase |
| コミットを取り消す | git revert |
まとめ
- ポイントまとめ
-
- cherry-pickは「特定のコミットだけを別のブランチに取り込む」コマンド
- 基本は `git cherry-pick <コミットID>` だけ
- `-n` でコミットせずに変更だけ取り込める
- `-x` で元のコミットIDをメッセージに記録できる
- コンフリクト時は `–abort` で中止、解消後は `–continue` で再開
- バグ修正の横展開(hotfix)や誤ったブランチへのコミット修正に特に便利
cherry-pickはGitの中でも少し上級なコマンドですが、使い方自体はシンプルです。
「あのコミットだけ欲しい」と思った時に、ブランチ全体をマージせずにピンポイントで取り込める便利なコマンドを、ぜひ活用してみてください。
プログラミングスキルをもっと伸ばしたいなら
独学で限界を感じていませんか?プロのカリキュラムなら最短でスキルが身につきます。
※無料体験・無料カウンセリングあり

コメント