マージコンフリクト

グループワークのレポートで、同じ文章を2人が同時に別々の内容に書き換えてしまい、どちらを残すべきか分からず作業がピタッと止まった瞬間です。

定義 バージョン管理システム(ファイルの変更履歴を記録するツール)において、複数人が同じファイルの同じ行を同時に異なる内容に編集した際、コンピュータがどちらを採用すべきか自ら判断できず、作業を一時停止して人に選択を委ねる状態のことです。

なぜ2人の作業がぶつかってしまうのか?

グループワークで役割分担をして、1つのレポートを共同で作成している場面を想像してみてください。チームメイトは3ページ目の2行目にある結論を「今回の企画に賛成する」と修正し、自分は自分のパソコンで同じ箇所を「今回の企画に反対する」と書き換えました。そして、2人がそれぞれ修正したファイルを1つに合体させて最終版を作ろうとします。

コンピュータは指示された命令を素早く正確に実行しますが、人間の意図までは読み取れません。「賛成」と「反対」のどちらがグループ全体の合意なのかを、コンピュータが勝手に判断することはできないからです。

もしコンピュータが自己判断でどちらか一方を選んで上書きしてしまったら、もう一方の大切な作業内容が一瞬で消えてしまいますよね。そのためコンピュータはどちらも捨てずに作業をストップします。これがまさに、同じ場所を別々に書き換えたことで生じる衝突(コンフリクト)です。

同一箇所の競合修正によるマージコンフリクト図 チームA:賛成 チームB:反対 同箇所を修正 衝突発生! どちらを残す?

もう少し正確に言うと(Gitが行を比較する仕組み)

Git(ギット:コードや文書の変更履歴を管理する代表的なツール)は、ファイルの変更箇所を行ごとに比較しながら自動で合体(マージ)する賢い能力を持っています。たとえば一人が1行目を直し、もう一人が50行目を直しただけであれば、Gitは何の問題もなく2人の修正をスムーズに1つにまとめてくれます。

もう少し正確に言うと、まったく同じファイルの同じ行を別々に変更したときにだけコンフリクトが発生します。一方が文章の単語を変えている最中に、もう一方がその行ごと丸ごと削除してしまった場合なども同様です。

このときGitは、ファイルの中に記号(<<<<<<<、=======、>>>>>>>)を自動で書き込み、どちらが誰の作業内容なのかを分かりやすく提示してくれます。プログラムが壊れたりエラーを起こしたりしたのではなく、ユーザーのデータが失われないように守ってくれる頼もしい安全装置が働いた証拠なのです。

コンフリクトの解決法と防ぎ方

画面にコンフリクトの警告が出ても、怖がったりファイルを作り直したりする必要はまったくありません。Gitが残した記号をエディタで開いて見れば、自分と相手が修正した内容が一目で分かるように整理されています。

両方の内容を落ち着いて見比べた上で、どちらか良い方を1つ選ぶか、2人の意見をすり合わせて新しい文章にまとめ直せば大丈夫です。整理が終わったら、Gitが付けた記号だけを綺麗に削除して保存すれば、コンフリクトの解消は完了です。

コンフリクトを事前に減らす最も効果的な方法は、こまめなコミュニケーションと更新です。作業を始める前に「今日どの部分を編集するか」をチームで共有し、仲間がアップロードした最新の成果物をこまめに自分のパソコンに取り込む習慣をつけると、衝突を大幅に減らすことができます。

🤔 よくある誤解

✕ 誤解

マージコンフリクトは、コードの書き方を間違えたせいで起きる致命的なエラー(バグ)だ。

✓ 事実

コンフリクトは不具合ではなく、コンピュータがデータを勝手に消去しないよう保護してくれる正常かつ安全な仕組みです。

🧺 日常で出会う場面

1 共同の企画書で、あるメンバーが締め切りを「金曜日」に、別のメンバーが「来週の月曜日」に同時に変更して統合したときに発生します。
2 Webサイトのボタンの色を、デザイナーが「青」に変更し、エンジニアが「紫」に変更してコードを統合しようとしたときに起こります。
💡 つまり ひとことで

同じ行を別々に書き換えたとき、コンピュータが勝手に上書きせず人に判断を求める安全装置です。