- 公開日
- 最終更新日
【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となります。
図解すると以下のようになります。

git mergeとの違い
「developブランチからマージすればいいじゃん」
と思われたかたもいらっしゃるかもしれません。
たしかにコミットを取り入れるという動作としては同じ動作になりますが、
必要ないコミットも取り入れてしまう場合もあります。
先ほどの図で説明すると、developブランチには必要なB`以外にもコミットCが存在しています。
ここでマージで取り入れてしまうと、このコミットCも含まれてしまうこととなります。

このような状況になると、履歴が複雑化したり意図しないコンフリクトが発生する場合があります。
ハンズオン
対象の確認
実際にハンズオンで操作してみました。
今回はそれぞれのブランチでファイルを以下のようにし、
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に初めて触れる方の参考になれば幸いです。
この記事は私が書きました
佐藤 祐弥
記事一覧日々の業務上での学びをコツコツアウトプットできればなと思います。