項目 | チェリーピック | マージ |
---|---|---|
目的 | 特定のコミットだけを選択的に取り込む | ブランチ全体の変更を統合する |
Gitコマンド例 | git cherry-pick a1b2c3d | git merge feature-branch |
取り込む範囲 | 選択した特定のコミットのみ | ブランチの全変更履歴 |
新しいコミット | 元コミットの内容で新しいコミットが作成される | マージコミットが作成される |
コミットID | 新しいコミットIDに変わる | 元のコミットIDは保持される |
使用例 | バグ修正だけをメインブランチに取り込む | 機能開発完了後に全変更を統合する |
履歴 | コミット履歴は元と異なる(分岐) | 両方のブランチの履歴が保持される |
コンフリクト発生時 | 個別コミットごとに解決が必要 | マージ時に一括で解決 |
チェリーピックの一般的な事例と注意点
1. 単一バグ修正のチェリーピック
featureブランチで開発中にバグ修正を行い、その修正だけをmainブランチに即座に適用したい場合に使用します。修正が独立していて他のコードに依存していない場合に最適です。
2. 依存関係のあるコミットのチェリーピック
複数の機能コミットが互いに依存している場合のチェリーピック。例えば、機能Bは機能Aに依存しているため、機能Bだけをチェリーピックするとエラーや競合が発生します。このような場合は、依存関係を考慮して正しい順序でチェリーピックする必要があります。
3. コンフリクトが発生するチェリーピック
同じファイルが両方のブランチで異なる方法で変更されている場合、チェリーピック時にコンフリクトが発生します。この場合、手動でコンフリクトを解決する必要があります。
4. 複数コミットのバッチチェリーピック
複数の連続したコミットをまとめてチェリーピックする場合です。範囲指定(git cherry-pick A..B
)または個別指定(git cherry-pick ハッシュ1 ハッシュ2 ハッシュ3
)で実行できます。
5. チェリーピック後のマージ競合
featureブランチから特定のコミットをmainブランチにチェリーピックした後、featureブランチを完全にmainにマージしようとすると、既に適用済みの変更として競合が発生する可能性があります。