【GitHub】コンフリクトとは何か?エラーコメントの見方と解決方法の基本について紹介
こんにちは、ちくたっく(@tictak_py)です。
今回は、GitHubでチーム開発をしていると一度は経験する「コンフリクト」について紹介します。
こんな方に読んで欲しい記事です
- コンフリクトが発生する原因やエラーの見方・解消方法の基本を知りたい方
- GitHubで使われている基本的なコマンドを学んでいきたい方
コンフリクトとは「衝突」の意味で、簡単に言ってしまえばファイル上で「自分の作業」と「他人の作業」が重複してしまった状態のことを指します。
コンフリクトは発生しない方が良いですが、今回は意図的にコンフリクトが発生した状況を作り出した上で、エラーメッセージの見方やコンフリクトの解消方法について理解することを目的としていきます。
【GitHub】コンフリクト発生のメカニズムと解消法
【事前準備】コンフリクトを発生させる
まず最初に、意図的にコンフリクトを発生させてみたいと思います。
コンフリクトは、「同一ファイル」の「同一箇所」を複数人が編集した状態でマージした時に発生します。
発生する状況としては色々考えられますが、例えばファイル「hello.txt」を自分が編集している間に、他の人が「hello.txt」を更新してGitHubにアップロードしていた場合、自分のローカル環境を最新にしようと「pull」コマンドを使うとコンフリクトが発生します。
言葉だけだとわかりにくいので、コマンドや画像を見ながら確認していきます。
まず、現在のワークツリーとGitHubの状態は以下のようになっています。
そして、手元にある「hello.txt」に以下赤枠の文章を追記したとしましょう。
一方で、GitHub上で他の人が「hello.txt」を以下の内容で編集していたとします。
(GitHub上で直接ファイルを編集することは稀ですが、今回は他人側の操作として直接編集します。)
これで、同一ファイル「hello.txt」の同一箇所「4行目」が編集された状態になりました。ローカルリポジトリにコミットした状態で「pull」コマンドを実行してみます。
すると、上記赤枠のように「コンフリクトが発生」と表示されたことがわかります。
「hello.txtをマージしようとしたら、コンフリクトが発生したのでマージに失敗した」と記載されています。
ここから、コンフリクトの内容を確認し、コンフリクトを解消していく方法を見ていきます。
【ポイント①】エラーメッセージを確認する
コンフリクトが発生したファイルを開くと、コンフリクトの状況を確認することが出来ます。手元にある「hello.txt」を開いてみると、以下のような状態になっていることがわかります。
ポイントは、自分の作業内容と取り込もうとした作業内容が上下で表示されている点です。
「<<<<<HEAD」から「======」で囲まれている部分(赤枠上部)が、今いるブランチで自分が作業した変更内容です。確かに「コンフリクトはおそろしい」といった内容を記載しましたね。
対して、「======」から「>>>>>>」で囲まれている部分(赤枠下部)が、取り込もうとした他の人が作業した変更内容です。GitHub上で「コンフリクトはこわくない」と追加していましたね。
このように、コンフリクトが発生すると「<<<<HEAD」「=====」「>>>>>>」といった一見よくわからない記号が出てきますが、意味を理解しておけば大して難しくないことがわかります。
【ポイント②】コンフリクトを解消する
以上を踏まえた上で、コンフリクトを解消する方法を確認していきましょう。
これも何も難しいことはなく、「あるべき内容」に修正した上で「コミット」すればOKです。
今回の例では、「hello.txt」に記載すべき内容は以下だったとします。
ファイルを修正したら、あとは「add」「commit」コマンドをするだけです。
これでコンフリクト解消です。
コンフリクトが発生している状態で「git status」を入力してみるとわかりますが、gitはすべきコマンドを教えてくれています(上記最初の赤枠部分)。
今回は非常にシンプルな例でしたが、「コンフリクトの内容」を確認した上で、「あるべき内容に修正」するだけでコンフリクトは簡単に解消出来ることを知っておいてください。
さいごに
今回は、gitで生じるトラブル「コンフリクト」について紹介してきました。
コンフリクトが生じた場合には、落ち着いて対処すれば問題ありませんが、そもそもコンフリクトを起こさせないような仕組み作りをしておくことも重要です。
「同一ファイル」を複数人で編集したことが根本的な原因なので、そもそもそのようなことが起こらないようにすればいいだけです。社内で簡単なルール作りをしておけば不要なトラブルは減らせるはずなので、参考にしてみてください。
「なんだかGitHubの全体像やイメージがわからなかった」という方は、以下記事内で紹介している図を見て頂ければ理解が進むかと思いますので、良ければ参考にしてください。
【初めての方向け】「GitHub」の全体像と使い方を解説します
こんにちは、TAKです。今回は、ソースコード管理ツール「GitHub」の全体像と使い方について紹介していきます。 前回、GitHubの始め方に関する記事を書いたので、「そもそもGItHubって何?」という方は先に以下の記事を参考にしてくださ…
では今回はこのへんで。