• TOP
  • 記事一覧
  • 依存関係のあるチェリーピック コンフリクトの対処 マージのちがい

依存関係のあるチェリーピック コンフリクトの対処 マージのちがい

更新日:2025/02/25

項目チェリーピックマージ
目的特定のコミットだけを選択的に取り込むブランチ全体の変更を統合する
Gitコマンド例git cherry-pick a1b2c3dgit merge feature-branch
取り込む範囲選択した特定のコミットのみブランチの全変更履歴
新しいコミット元コミットの内容で新しいコミットが作成されるマージコミットが作成される
コミットID新しいコミットIDに変わる元のコミットIDは保持される
使用例バグ修正だけをメインブランチに取り込む機能開発完了後に全変更を統合する
履歴コミット履歴は元と異なる(分岐)両方のブランチの履歴が保持される
コンフリクト発生時個別コミットごとに解決が必要マージ時に一括で解決

チェリーピックの一般的な事例と注意点

1. 単一バグ修正のチェリーピック

featureブランチで開発中にバグ修正を行い、その修正だけをmainブランチに即座に適用したい場合に使用します。修正が独立していて他のコードに依存していない場合に最適です。

単一バグ修正のチェリーピック main feature m1 m2 m3 f1 バグ修正 バグ修正コミット – 単一ファイル変更 – 独立した修正

2. 依存関係のあるコミットのチェリーピック

複数の機能コミットが互いに依存している場合のチェリーピック。例えば、機能Bは機能Aに依存しているため、機能Bだけをチェリーピックするとエラーや競合が発生します。このような場合は、依存関係を考慮して正しい順序でチェリーピックする必要があります。

依存関係のあるコミットのチェリーピック release develop r1 r2 r3 d1 機能A 機能B 機能C エラー: 依存関係の問題 機能Bは機能Aに依存しています 正しいチェリーピック順序: 1. 機能A → 2. 機能B

3. コンフリクトが発生するチェリーピック

同じファイルが両方のブランチで異なる方法で変更されている場合、チェリーピック時にコンフリクトが発生します。この場合、手動でコンフリクトを解決する必要があります。

コンフリクトが発生するチェリーピック main feature m1 m2: ファイルXを変更 m3 f1 f2 f3: ファイルXを変更 f4 コンフリクト発生 mainブランチのファイルX: function hello() { return “Hello World!”; featureブランチのファイルX: function hello() { return “こんにちは”; }

4. 複数コミットのバッチチェリーピック

複数の連続したコミットをまとめてチェリーピックする場合です。範囲指定(git cherry-pick A..B)または個別指定(git cherry-pick ハッシュ1 ハッシュ2 ハッシュ3)で実行できます。

複数コミットのバッチチェリーピック main feature m1 m2 m3 f2 f3 f4 f5 f6 f7 バッチチェリーピックコマンド git cherry-pick f2..f4 または git cherry-pick ハッシュ1 ハッシュ2 ハッシュ3

5. チェリーピック後のマージ競合

featureブランチから特定のコミットをmainブランチにチェリーピックした後、featureブランチを完全にmainにマージしようとすると、既に適用済みの変更として競合が発生する可能性があります。

チェリーピック後のマージ競合 main feature m1 m2 m3 m4: マージ? m5 f1 f2: 機能実装 f3 f4 マージ時に競合 チェリーピック後のマージ競合 1. featureブランチで機能実装(f2)をmainにチェリーピック 2. featureブランチで更に開発を続行し、変更を加える(f3, f4) 3. featureブランチの完了後、mainにマージしようとする 問題: f2の変更が既にmainに存在するため、マージ時に 「既に適用済みの変更」として競合が発生する
人気記事ランキング
話題のキーワードから探す