git cherry-pickの使い方:特定のコミットだけを取り込む実務での活用シーンとコンフリクト対応

パッケージ化・配布

Gitを使って複数人で開発を進めていると、「他のブランチで行われた修正のうち、この1つのコミットだけを今のブランチに取り込みたい」という状況が必ず発生します。

ブランチ全体をマージ(git merge)してしまうと、まだリリースできない未完成の機能まで混ざってしまう——。そんな時に活躍するのが git cherry-pick(チェリーピック)コマンドです。

本記事では、cherry-pick の基本的な使い方から、実務で頻出する活用シーン、そしてコンフリクト(競合)が起きた時の安全な対処法までを解説します。

1. git cherry-pick の基本構文と動作

cherry-pick は、文字通り「つまみ食い」をするように、指定したコミットの「変更内容」だけを現在のブランチに新しいコミットとして適用するコマンドです。

# 現在のブランチに、指定したコミットIDの変更を取り込む
git cherry-pick [コミットID]

実行例:別のブランチからバグ修正だけを取り込む

例えば、現在 main ブランチにいて、feature/login ブランチで行われたバグ修正(コミットID: a1b2c3d)だけを取り込みたいとします。

  1. まず、取り込みたいコミットのIDを調べます(git log などで確認)。
  2. 現在のブランチ(取り込み先)に移動します。
   git checkout main
  1. cherry-pick を実行します。
   git cherry-pick a1b2c3d

これだけで、a1b2c3d の変更内容が main ブランチに新しいコミットとして追加されます。この時、コミットメッセージや作成者情報は元のコミットから引き継がれますが、コミットIDは新しく生成される点に注意してください。

2. 実務での代表的な活用シーン

cherry-pick は、以下のような実務の場面で非常に重宝します。

シーン1:リリース直前に見つかった致命的なバグ修正

本番リリース用のブランチ(release)を準備している最中に、開発中のブランチ(develop)で重大なバグ修正が行われました。develop には他にも未完成の機能が含まれているため、マージはできません。

このような場合、develop ブランチの「バグ修正のコミット」だけを release ブランチに cherry-pick します。

シーン2:間違ったブランチにコミットしてしまった時のリカバリ

「本来は feature/A ブランチで作業するはずだったのに、誤って main ブランチにコミットしてしまった!」というミスはよくあります。

この場合、以下の手順でリカバリできます。

  1. feature/A ブランチを作成し、移動する。
   git checkout -b feature/A
  1. 間違えたコミットを main ブランチから cherry-pick して取り込む。
   git cherry-pick [間違えたコミットID]
  1. main ブランチに戻り、間違えたコミットを打ち消す(git reset --hardgit revert など)。

シーン3:複数のコミットをまとめて取り込む

1つのコミットだけでなく、複数のコミットを順番に取り込むことも可能です。

# 複数のコミットをスペース区切りで指定(左から順に適用される)
git cherry-pick a1b2c3d e4f5g6h

# 範囲で指定(Aの次のコミットからBまで)
git cherry-pick A..B

# Aを含めてBまで指定
git cherry-pick A^..B

3. コンフリクト(競合)が発生した時の対処法

cherry-pick を実行した際、取り込もうとしている変更箇所が、現在のブランチで既に別の修正を受けていた場合、コンフリクト(競合)が発生して処理が中断されます。

コンフリクトが起きた場合は、慌てずに以下の手順で解決します。

ステップ1:競合箇所を修正する

git status でコンフリクトが起きているファイルを確認し、エディタで開いて修正します(通常の merge 時のコンフリクト解消と同じです)。

# 競合ファイルの確認
git status

ステップ2:修正したファイルをステージングする

修正が終わったら、git add でファイルをステージング(インデックスに登録)します。

git add [修正したファイル]

ステップ3:cherry-pick を再開(–continue)する

コンフリクトが解消されたら、--continue オプションを付けて cherry-pick の処理を再開させます。

git cherry-pick --continue

エディタが立ち上がり、コミットメッセージの確認・編集画面が表示されます。保存して閉じれば、cherry-pick 完了です。

(補足)cherry-pick を途中でやめる(–abort)

コンフリクトの解消が難しく、「やっぱり cherry-pick するのをやめたい」という場合は、--abort オプションを使用します。

git cherry-pick --abort

これを実行すると、cherry-pick を開始する前の状態(コンフリクトも起きていない状態)に安全に戻すことができます。

まとめ

git cherry-pick は、「この修正だけ欲しい!」というピンポイントな要望に応えてくれる強力なコマンドです。

  1. 基本: git cherry-pick [コミットID] で、特定の変更だけを現在のブランチに取り込む。
  2. 活用: リリース前のバグ修正取り込みや、誤ったブランチへのコミットのリカバリに使う。
  3. 対処: コンフリクトが起きたら修正して git addgit cherry-pick --continue で再開。やめる時は --abort

マージやリベースと並んで、Gitを使ったチーム開発では必須のスキルですので、ぜひ使いこなせるようになってください。

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント