Git で作業中のブランチに他ブランチの特定の commit を反映する
これから作業予定のブランチで master に取り込まれ待ちの別ブランチの commit の内容が必要だったので、その commit をこれから作業予定のブランチにも持ってくることにしました。
今の状況
master に取り込まれ待ちの別ブランチが 【ブランチ A】 で、これから作業予定のブランチが 【ブランチ B】 です。
ブランチ A (master から作成)
フォルダ X とその配下にファイル A を作成して commit 済み
master に push し、取り込み待ちの状態
(ブランチ A の commit はゆくゆく master に merge されることは確定済み)
ブランチ B (master から作成)
フォルダ X の下にファイル B を作成して commit したい
でも、master にブランチ A の commit がまだ取り込まれていないので、ブランチ B 作成時点ではフォルダ X がない
かといってブランチ B でもフォルダ X を作ると、master に merge するときにコンフリクトを起こすはず。。
そのときは手動で merge すればいいだけの話だけど、なんとなく嫌だ!
cherry-pick コマンドでブランチ B にブランチ A の特定の commit を反映する
調べてみたら、こういうときは cherri-pick コマンドが使えるとわかったので、早速お試し。
以下、手順です。
ブランチ A の commit ID を調べる
これから作業予定のブランチ(ブランチ B)に持っていきたい別ブランチ(ブランチ A)の commit の commit ID を調べます。
$ git checkout branch-a $ git log commit 1234567890abcdefghij1234567890abcdefghij Author: hogehoge <hogehoge@mail.com> Date: Wed Nov 1 12:34:56 2017 +0900 add file-a.md
上記の 1234567890abcdefghij1234567890abcdefghij
の部分をコピーしておきます。
ブランチ B にブランチ A の commit を反映する
これから作業予定のブランチ(ブランチ B)に切り替え、先ほど調べた commit ID を使って、cherry-pick コマンドを実行します。
$ git checkout branch-b $ git cherry-pick 1234567890abcdefghij1234567890abcdefghij
これでブランチ B にブランチ A の commit 内容が適用されます。簡単!
あとは master に取り込まれるときに問題ないことが分かればバッチリ。
今回は cherry-pick コマンドを使ってみたけど、他にも方法があったりするのかなー??
もし、もっといい方法が見つかったら、また追記しようと思います。
2017/11/07 追記:
コンフリクトなどの問題が起きることなく、無事に master に取り込まれることを確認!
ちなみに、特定の commit ではなく、ブランチまるごと反映させたい場合は以下のコマンドでできます。
(ブランチ A をブランチ B に反映させてます)
$ git pull origin branch-a:branch-b
こちらの方法でも問題なく、master に取り込まれるのを確認済みです。