アフィリエイト広告を紹介しています
Working Class Hero:泥臭く、スマートに生き抜く。

汗と汚れの染み込む現場も、キーボードを叩く現場も、どちらも知っている。 元ライン工の僕が、ITの世界で見つけた「少しだけ楽に、自分らしく働くための知恵」を置いておきます。

僕が働き方を変えた理由

【初心者向け】git cherry-pickの使い方!特定のコミットだけ取り込む方法

「別のブランチで作った機能の一部だけ、今のブランチに取り込みたい」

そんな場面で役立つのが 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の中でも少し上級なコマンドですが、使い方自体はシンプルです。

「あのコミットだけ欲しい」と思った時に、ブランチ全体をマージせずにピンポイントで取り込める便利なコマンドを、ぜひ活用してみてください。

プログラミングスキルをもっと伸ばしたいなら

独学で限界を感じていませんか?プロのカリキュラムなら最短でスキルが身につきます。

※無料体験・無料カウンセリングあり

コメント