【ITニュース解説】100 Days of DevOps: Day 33
2025年09月05日に「Dev.to」が公開したITニュース「100 Days of DevOps: Day 33」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
Gitで発生したマージコンフリクトを解消した。ローカルで追加したストーリータイトルと、リモートの更新内容が競合。テキストファイルを開き、両方の変更を反映してコミット。さらに、ファイル内のタイプミスを修正し、リモートリポジトリへプッシュ。Web UIで変更内容を確認し、コンフリクト解消と更新が完了した。
ITニュース解説
今回の記事は、Gitを使った共同開発における「コンフリクト(競合)」の解消方法について解説している。特に、システムエンジニアを目指す初心者にとって、Gitは必須のツールであり、複数人で同じファイルを編集する際に必ずと言っていいほどコンフリクトに遭遇するため、この記事の内容は非常に重要だ。
記事では、「story-blog」というプロジェクトを例に、Maxというユーザーがローカルで変更した内容をリモートリポジトリに反映しようとした際に、コンフリクトが発生する状況から、その解決、そして最終的なリモートリポジトリへの反映までの一連の流れを具体的に説明している。
まず、Maxはローカルでストーリーのタイトルを2つ追加し、「The Lion and the Mouse」というストーリーファイル内のタイプミスを修正した。その後、これらの変更をリモートリポジトリに反映するためにgit pushコマンドを実行した。しかし、その結果、エラーが発生。これは、リモートリポジトリにMaxが持っていない変更が含まれているためだ。
この問題を解決するために、Maxはまずgit pullコマンドを実行した。git pullは、リモートリポジトリの最新の変更をローカルリポジトリに取り込むコマンドだ。しかし、今回はこのコマンドを実行したことで、story-index.txtファイルにコンフリクトが発生した。これは、Maxがローカルで変更を加えたstory-index.txtファイルと、リモートリポジトリにあるstory-index.txtファイルが同時に更新されたために、Gitが自動的にマージ(統合)できなくなったことを意味する。
コンフリクトが発生すると、story-index.txtファイルには特殊な記号(<<<<<<< HEAD, =======, >>>>>>> origin/master)で囲まれた部分が現れる。これらの記号は、コンフリクトが発生している箇所と、それぞれのバージョン(ローカルとリモート)の内容を示している。Maxはviエディタを使ってこのファイルを開き、手動でコンフリクトを解消する必要がある。
具体的には、<<<<<<< HEADから=======までの部分がMaxのローカルの変更、=======から>>>>>>> origin/masterまでの部分がリモートリポジトリの変更を表している。Maxは、これらの両方の変更を考慮し、最終的にstory-index.txtファイルに含めるべき内容を決定する。今回の例では、ローカルで追加した2つのストーリータイトルと、リモートリポジトリにあった2つのストーリータイトルをすべて含めるようにファイルを修正した。
次に、Maxはタイプミスを修正した「the-lion-and-the-mooose.txt」ファイルを開き、「Mooose」を「Mouse」に修正した。その後、git add story-index.txtコマンドを実行して、コンフリクトを解消したstory-index.txtファイルの変更をステージングエリアに追加。そして、git commit -m "Resolved merge conflict in story-index.txt and fixed typo"コマンドで、コミットメッセージとともに変更をコミットした。
最後に、git push origin masterコマンドを実行して、ローカルリポジトリの変更をリモートリポジトリにプッシュした。これにより、コンフリクトが解消され、タイプミスも修正された最新の状態がリモートリポジトリに反映された。
Maxは、GiteaのWebインターフェースにログインし、story-blogリポジトリを開いて、story-index.txtファイルにすべてのストーリータイトルが正しくリストされていること、および「The Lion and the Mouse」のタイプミスが修正されていることを確認した。
この一連の作業を通して、Gitを使った共同開発では、コンフリクトの発生は避けられないこと、そしてコンフリクトが発生した際には、慌てずにコンフリクトマーカーを確認し、手動で内容を修正する必要があることを学ぶことができる。コンフリクトの解消は、最初は難しく感じるかもしれないが、慣れてくればスムーズに行えるようになる。Gitの理解を深め、積極的にコンフリクトの解消に取り組むことで、より効率的な共同開発が可能になるだろう。