yuuki blog

プログラミング をアプトプットしています。

Git Hub ブランチの流れについて (コンフリクト)

コンフリクトとは

コンフリクトとは、あるファイルにおいてブランチごとに情報が異なり辻褄が合わない状況のことを言います。コンフリクトは日本語で「競合」という意味です。

(例)Aさんの作業するブランチでは投稿一覧機能を作るためにコントローラーのindexアクションを作成し、Bさんの作業するブランチでは投稿機能を作るためにnewアクションを作成したとします。

すると、Aさんのブランチには「indexはあるけどnewはない」、Bさんのブランチでは「newはあるけどindexはない」というコントローラーの記述が出来上がります。このように辻褄の合わない状況がコンフリクトです。

f:id:yuukii5:20201112150431p:plain

ブラウザエディタでコンフリクトを解決方法

masterブランチにマージしようとすると今までと異なる画面が表示されています。

https://tech-master.s3.amazonaws.com/uploads/curriculums//72fc7d1157c4f683a7f43815623430e1.png

Resolve conflictsをクリックします。

https://tech-master.s3.amazonaws.com/uploads/curriculums//93bf241e773e3ff1f385574bc3ed45db.png

本来あるべきコードに編集に編集します

https://tech-master.s3.amazonaws.com/uploads/curriculums//4421295a4b148dd297d7c816271a316b.png

編集ができたら、右上にある「Mark as resolved」をクリックします

https://tech-master.s3.amazonaws.com/uploads/curriculums//324317e967b8ae330bd557794aa74753.png

画面が切り替わり右上に緑色で「Commit merge」と表示されるのでクリックします

https://tech-master.s3.amazonaws.com/uploads/curriculums//8590b9dbcaefc71835007ec1ba310b41.png

すると今まで通りのmergeの画面に戻ります。

コンフリクトの注意点

コンフリクトを発生させないようにするためには以下のポイントです。

  • ブランチの作成前に、pullを行うこと。

    • 最新のmasterブランチの情報を反映してからブランチを作成しないと、マージする際にコンフリクトの箇所が多くなるためです。
  • 複数人で開発を行う場合は、打ち合わせを行って作業に取り掛かること。

    • むやみに同じファイルを編集する作業を同時並行しないことで、コンフリクトを最小限にできます。しかし、やむを得ず作業を同時並行させることもあります。その場合「どこがコンフリクトしそうか」をあらかじめ把握しておくとコンフリクト解消の作業が楽になります。

コンフリクト発生時のポイント

  • なぜ、コンフリクトが発生したのかを明確にすること。
  • 同じ原因のコンフリクトを発生させないこと。
  • 複数人での開発でコンフリクトが発生した場合は、独断で解消しようとせず他のファイル編集者と相談して解消すること。

本章で行ったコンフリクトの解消は、編集内容をどちらともマスターにmergeしましたが、どちらかを削除するパターンもあります。