メインコンテンツへスキップ
レッスン 6 / 15推定時間: 20

チェリーピック(git cherry-pick)

特定のコミットだけを別のブランチに適用する方法を学び、柔軟な変更管理ができるようになりましょう

このレッスンの学習目標

  • cherry-pickの概念と使用場面を理解する
  • 基本的なcherry-pick操作をマスターする
  • cherry-pickの注意点とベストプラクティスを学ぶ

チェリーピックとは?

チェリーピック(cherry-pick)は、特定のコミットを選んで現在のブランチに適用する操作です。まるでサクランボを一つずつ摘むように、必要なコミットだけを選択できます。

こんな時に便利

🚑 緊急修正の適用

  • 「developブランチのバグ修正を本番環境にすぐ適用したい」
  • 「でも、developの他の変更はまだリリースしたくない」

🔄 変更の再利用

  • 「別のブランチで作った機能を現在のブランチでも使いたい」
  • 「間違ったブランチにコミットしてしまった」

🎯 選択的な統合

  • 「長期開発ブランチから特定の改善だけを取り込みたい」
  • 「実験的な変更の一部だけを採用したい」

基本的な使い方

1. 単一コミットのcherry-pick

# 特定のコミットを現在のブランチに適用
git cherry-pick <commit-hash>

# 例
git cherry-pick abc1234

2. 複数コミットのcherry-pick

# 範囲指定(開始は含まれない)
git cherry-pick <start-commit>..<end-commit>

# 複数の個別コミット
git cherry-pick commit1 commit2 commit3

3. オプション

# コミットせずに変更だけ適用
git cherry-pick -n <commit-hash>

# コミットメッセージを編集
git cherry-pick -e <commit-hash>

# 元のコミット情報を追加
git cherry-pick -x <commit-hash>

cherry-pick中のコンフリクト

コンフリクトが発生した場合

# 1. コンフリクトを解決
# 2. 変更をステージング
git add resolved-file.js

# 3. cherry-pickを続行
git cherry-pick --continue

# または中止
git cherry-pick --abort

実践的な使用例

シナリオ1: バグ修正の選択的適用

# developブランチでバグ修正
git checkout develop
# ... バグ修正のコミット (commit: fix123) ...

# mainブランチに修正だけ適用
git checkout main
git cherry-pick fix123

シナリオ2: 間違ったブランチへのコミットを修正

# 間違ってmainにコミット
git checkout main
# ... 機能追加 (commit: feat456) ...

# 正しいブランチに移動
git checkout feature/new-feature
git cherry-pick feat456

# mainから削除
git checkout main
git reset --hard HEAD~1

シナリオ3: 複数ブランチへの同じ修正

# セキュリティ修正を複数のリリースブランチに適用
git checkout release/v1.0
git cherry-pick security-fix

git checkout release/v2.0
git cherry-pick security-fix

git checkout release/v3.0
git cherry-pick security-fix

cherry-pickの注意点

1. コミットの重複

cherry-pickは新しいコミットを作成するため、同じ変更が異なるコミットIDで存在することになります。

Original: A---B---C---D develop
                ↓
          E---F---C'---G main (C' is cherry-picked C)

2. 依存関係の考慮

コミットが他のコミットに依存している場合、cherry-pickが失敗したり、バグを引き起こす可能性があります。

3. マージ時の問題

cherry-pickしたコミットを含むブランチをマージする際、同じ変更が重複して適用される可能性があります。

ベストプラクティス

1. -xオプションの使用

# 元のコミット情報を記録
git cherry-pick -x abc1234

# コミットメッセージに以下が追加される:
# (cherry picked from commit abc1234)

2. 関連コミットをまとめて適用

# 機能に関連する全てのコミットを確認
git log --oneline --grep="feature-x"

# 順番に適用
git cherry-pick commit1 commit2 commit3

3. テストの実施

# cherry-pick後は必ずテストを実行
git cherry-pick fix123
npm test

実践演習

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

cherry-pickとその他の方法の比較

方法使用場面メリットデメリット
cherry-pick特定のコミットだけ必要柔軟で簡単コミットの重複
mergeブランチ全体を統合履歴が保持される不要な変更も含まれる
rebase履歴を整理したいきれいな履歴既存のコミットを変更

まとめ

cherry-pickは、特定の変更だけを別のブランチに適用したい場合に非常に便利なツールです。ただし、コミットの重複や依存関係には注意が必要です。適切に使用することで、柔軟な変更管理が可能になります。

次のレッスンでは、作業中の変更を一時的に保存する「スタッシュ」について学びます。

さらに学習を続けるには

素晴らしい学習ペースです!次のレッスンに進むには、無料会員登録をお願いします。無料会員では各コース3レッスンまで学習できます。

無料で続きを学ぶ

各コース3レッスンまで学習可能

学習進捗の自動保存

コース修了証明書の発行