git cherry-pick を使用します
git cherry-pick [取り込むコミットID]
範囲を指定して連続したコミットを取り込むには、以下のコマンドを使用します。
(開始コミットの後に ^ をつけるのを忘れないように)
git cherry-pick <開始コミットID>^..<終了コミットID>
左側が古いコミット、右側が新しいコミットです。
また左側には最後 ^ をつけると、開始コミットID 自身も取り込まれます。つけない場合はその次のコミットから取り込まれます。
例: a1b2c3dのコミットからd4e5f6gまでを取り込む
git cherry-pick a1b2c3d^..d4e5f6g
git cherry-pick <コミットID1> <コミットID2> <コミットID3>
かなりの確率でコンフリクトは起こると考えておいた方が良いのでその対応を知っておきましょう。 コンフリクトが起きると次のようなログ出力となります
Auto-merging local/resources/xxxx.cs
Auto-merging local/resources/bbbb.cs
CONFLICT (content): Merge conflict in local/app/Http/Requests/cccc.cs
CONFLICT (content): Merge conflict in local/app/Http/Controllers/dddd.cs
CONFLICT (content) となっているファイルを修正、保存します。
その後に修正したファイルを追加してコミットします。
git add local/app/Http/Requests/cccc.cs
git add local/app/Http/Controllers/dddd.cs
コミットします。コメントの先頭に [cherry-pick] → をつけてわかりやすいようにします。(書き方はなんでもokです)
git commit -m "[cherry-pick] → [fix] ○○○の不具合を修正"
とします
git cherry-pick で大量のコンフリクトが発生し、元の状態に戻りたい場合、以下の手順で行うことができます。
コンフリクトが発生した状態で、まだ解消していない場合は、以下のコマンドを使用して cherry-pick を中止し、元の状態に戻すことができます。
git cherry-pick --abort
もし既にコンフリクトを手動で解消しようとしていて、それでも元に戻したい場合は、git reset --hard を使って最新のコミットの状態に戻すことができます。ただし、この操作は未保存の変更をすべて破棄するので注意が必要です。
git reset --hard HEAD