どうも、こんにちは!
今日は、特定の場面でのgitコマンドについて、記録しようかと思います。
その場面は
ある作業ブランチでの作業が長引いた時の、作業ブランチへのmasterブランチのマージ
となります。
では、早速見ていきましょう!
場面について
ある作業ブランチでの作業が長引いた時の、作業ブランチへのmasterブランチのマージ
再 掲
このgit操作を行う必要がある場面に、業務でいつ遭遇してもおかしくないと思います。
実際に僕も何回か遭遇しました。
詳しくどのような場面であるかを見ていきましょう!
Aというブランチで作業をしていたところ、コードレビューでの指摘修正等も重なり、Aブランチでの作業が2週間ほど経ったころ、上司から次のようなことを指示されました。
最新のmasterブランチをAブランチにマージしといてくれる?
この指示について補足すると、
masterブランチが2週間の間に結構更新されているから、事前にコンフリクトに対応するためにも、最新のmasterブランチをAブランチにマージしといてくれる?
という意味でした。
なぜ、masterブランチをマージする必要があるのかというと、
例えば、Aブランチでの作業が全て完了し、いざmasterブランチへAブランチをマージ!となった際に、コンフリクトが発生・・・
Aブランチの作業担当者にコンフリクトが発生したことを連絡し、対応を依頼して・・・
(ブランチの作業者とmasterブランチへのマージを行う担当者は通常異なることが多いと思います。)
というようにマージのタイミングでのコンフリクト発生は、少々手戻りのような形になり、面倒です。
そのため、Aブランチで作業中の間に、作業担当者がmasterブランチの最新の状況をAブランチに反映させて、コンフリクトが発生するかどうか事前に確認しておこうという内容の指示でした。
コマンド操作
以降では、gitのコマンド操作を順にご紹介します。
masterブランチへ切り替える
まずは、作業中のブランチからmasterブランチへ切り替えます。
git checkout 切り替え先のmasterブランチ名
masterブランチを最新化する
切り替えたローカルのmasterブランチを最新化するため、リモートリポジトリの対応するmasterブランチを取り込みます。
git pull リモートリポジトリ名 masterブランチ名
※ 通常ローカルのmasterブランチ名は、リモートのmasterブランチ名と同じであることが多いです。
これでローカルのmasterブランチは、リモートと同じ(最新)状態になりました。
再び作業ブランチに戻る
作業をしていたブランチに戻ります。
git checkout 作業ブランチ名
マージする
作業をしていたブランチに戻ってきました。
作業ブランチにいる状態で、最新化したmasterブランチをマージさせます。
マージにより、masterブランチの内容が作業ブランチに取り込まれます。
git merge masterブランチ名
これで完了です!
作業ブランチが最新化されました。
引き続き作業ブランチでの作業に戻りましょう!
コンフリクトが発生したら・・・
マージした際に、コンフリクトが発生する可能性があります。
自分が、作業ブランチで修正している箇所について、別の作業者…①が別のブランチでコード修正し、その修正内容をmasterブランチに反映させていた場合は、コンフリクトが発生します。
初めてのコンフリクトの場合は少し焦ってしまいますが、そもそも作業ブランチの最新化は、コンフリクトを事前に対応するという点が大きな意味でしたので、何も問題ありません。
どこの修正がぶつかっているか確認し、落ち着いて対応しましょう!
お互いの修正内容に矛盾が生じ、共存することができない場合は、作業者①に直接確認あるいは、先輩や上司等の近くの周りの人に確認してみましょう。
まとめ
No | コマンド | 内容 |
---|---|---|
1 | git checkout 切り替え先のmasterブランチ名 | masterブランチへの切り替え |
2 | git pull リモートリポジトリ名 masterブランチ名 | masterブランチを最新化する |
3 | git checkout 作業ブランチ名 | 作業ブランチに戻る |
4 | git merge masterブランチ名 | 最新化したmasterブランチを 作業ブランチに反映させる |