ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

【Git】特定のコミットを取り入れるcherry-pickについて

この記事を共有する

目次

はじめに

こんにちは、サービスGの佐藤です。

突然ですが、現場でとある作業の説明があった際、
「作成したtaskブランチにAブランチのコミットをチェリーピックしてくださいね。」
と言われましたが、恥ずかしながらチェリーピックという用語を初めて聞いたので、
頭の中は?だらけとなってしまいました。。

今回はそのチェリーピックについて調べ、学んだことをまとめていきます。

cherry-pickの語源

チェリーピック(以下cherry-pickと記載)と個人的にかわいらしい名前だなと思い、
少し語源について調べてみました。

以下参照サイトより抜粋。

cherry-pick 「最も良いものを自己中心的に選ぶこと」

参照: https://www.etymonline.com/jp/word/cherry-pick

英語の慣用句として、「熟したサクランボだけを選んでつかみ取る」
といった意味から「最も良いものを自己中心的に選ぶこと」「最良のものを選択する」といった意味合いで
使われることが多くなったようです。

この後、説明するgit cherry-pickについてもまさにそのイメージとなるので、
この命名はなるほどなと個人的には思わされました。

git cherry-pickの動作

それでは、git cherry-pickの動作についてまとめていきます。 cherry-pickを行うことで、特定のコミットを取り入れることが可能となります。

例えば、developブランチと自身が開発しているtestブランチがあるとします。 急遽developブランチで共通機能(コミット)が追加され、 各開発者はこの機能を考慮し、開発を進めることが必要となりました。
その際、自身のtestブランチに対しても、該当機能のコミットを追加することが必要となります。

上記のような場合に適した方法がcherry-pickとなります。
図解すると以下のようになります。

チェリーピック.png

git mergeとの違い

「developブランチからマージすればいいじゃん」
と思われたかたもいらっしゃるかもしれません。

たしかにコミットを取り入れるという動作としては同じ動作になりますが、
必要ないコミットも取り入れてしまう場合もあります。

先ほどの図で説明すると、developブランチには必要なB`以外にもコミットCが存在しています。
ここでマージで取り入れてしまうと、このコミットCも含まれてしまうこととなります。

mergeの場合.png

このような状況になると、履歴が複雑化したり意図しないコンフリクトが発生する場合があります。

ハンズオン

対象の確認

実際にハンズオンで操作してみました。
今回はそれぞれのブランチでファイルを以下のようにし、
testブランチへdevelopブランチから必要なBBファイル(BBコミット)をcherry-pickしていきます。

 # developブランチ
    commitA.txt #コミットAで作成したファイル
    commitB.txt #コミットBで作成したファイル
    commitBB.txt #コミットBBで作成したファイル cherry-pick対象
    commitC.txt #コミットCで作成したファイル
 # testブランチ
    commitA.txt
    commitB.txt

developブランチでのreflogは以下のようになっています。
対象コミットIDは4c0b41cであることを確認します。

$ git reflog
    d67c31c (HEAD -> develop) HEAD@{0}: commit: commitC
    4c0b41c HEAD@{1}: commit: commitBB
    aebd09d (test, 1124) HEAD@{2}: checkout: moving from 1124 to develop
    aebd09d (test, 1124) HEAD@{3}: checkout: moving from develop to 1124
    aebd09d (test, 1124) HEAD@{4}: commit: commitB
    ee4111a HEAD@{5}: commit: commitA
    dc35939 (origin/main, origin/HEAD, main) HEAD@{6}: checkout: moving from main to develop

testブランチでのcherry-pick

testブランチに移動します。
上記で確認したコミットIDを使用して以下コマンドを実施します。

$ git cherry-pick 4c0b41c
    [test d208435] commitBB

実施後、対象ファイルが追加されています。

$ ls
README.md  commitA.txt  commitB.txt  commitBB.txt

ログを確認しても該当のコミットが反映できていることが確認できます。

$ git log
commit d2084355fc615a6c6a430fa5e7cf7a3e35bae9cb (HEAD -> test)
Author: 【省略】
Date:   Mon Nov 24 05:33:28 2025 +0000
    commitBB
commit aebd09d31aa611dfcfaf6eaf5b5a68ed75f0dec1 (1124)
Author: 【省略】
Date:   Mon Nov 24 05:28:50 2025 +0000
    commitB
commit ee4111a0033a551ac4f7c2874ad552bf29d64783
Author: 【省略】
Date:   Mon Nov 24 05:27:54 2025 +0000
    commitA

まとめ

いかがだったでしょうか。
特定のコミットを取り入れる操作は開発者としてよくあるケースだと思いますので、
自分と同じくcherry-pickに初めて触れる方の参考になれば幸いです。

この記事は私が書きました

佐藤 祐弥

記事一覧

日々の業務上での学びをコツコツアウトプットできればなと思います。

佐藤 祐弥

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。