複数の作業ブランチがあり、その中から特定コミットを反映させたい。
しかし、リリースの日程調整上、全てマージするわけにはいかないと言ったこともあり得ます。
このコミットの内容だけ欲しいのになぁという場面で使えます。
cherry-pick
// これを実行するとコミットまで実施される。
git cherry-pick 1fdc89d0
// コミットはせずステージングにあげる
git cherry-pick -n
// 名前を指定する
git cherry-pick -e
// 複数コミットに対して行う(1fdc89d0 ~ 546fc501の間のコミットを対象に)
git cherry-pick 1fdc89d0..546fc501
コミットIDの調べ方
git log
コンフリクトが起きた
コンフリクトの解消をしたら下記で処理を再開できる
git cherry-pick --continue
// やめる時
git cherry-pick --abort
cherry-pickは再使用できない
これはすでにcherry-pickしようとしているコミットIDがブランチに記録されている場合の話。
例えばあるコミットでデグレを起こし、該当箇所をrevertし解消した後Pushしたとする。
この後、再度ローカルブランチで一部コミットだけをcherry-pickして修正を加えるなどができない。そのコミットは履歴に組み込まれているという認識になるため。
こんな場合にも使えるのがcheckout。
checkout branch名 -- file名 で該当ファイルの内容を引っ張る
git checkout branch名 -- file名
これならcode内容をとってくるだけなので、自分で新規コミットを作る形になる。