マージコンフリクトの手動解決
分岐したブランチを統合する際に発生するマージコンフリクトを手動で特定し、解決する方法を学びます。
「マージコンフリクトの手動解決」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
マージコンフリクトを理解する
マージコンフリクトの世界へようこそ。心配する必要はありません。これはGitで共同作業を行う際によく起こることです。マージコンフリクトは、Gitが2つの異なるブランチの変更を自動的に統合できないときに発生します。
通常は、2つのブランチが同じファイルの同じ行を異なる方法で変更した場合や、一方のブランチが削除したファイルを別のブランチが変更した場合に発生します。
コンフリクトが発生する理由
Gitはほとんどの変更を非常に賢く自動でマージします。しかし、判断が分かれる状況では人の助けが必要です。よくあるケースは次のとおりです。
- 同じ行に異なる変更:2人が同じコード行をそれぞれ異なる内容に編集した場合。
- 一方が削除し、もう一方が変更:一方のブランチがファイルを削除し、別のブランチがそのファイルを変更した場合。
- 名前変更と変更:一方のブランチでファイル名を変更し、別のブランチでそのファイルを変更した場合。
Gitでコンフリクトを検出する
マージコンフリクトが発生すると、Gitはマージを自動的に完了できません。代わりに処理を一時停止し、コンフリクトが発生しているファイルを知らせます。次のようなメッセージが表示されます。
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.コンフリクトに対する`git status`の使用
自動マージに失敗すると、リポジトリは「マージ中」の状態になります。git statusを使うと、コンフリクトしているファイルを確認できます。これらのファイルは「unmerged paths」として一覧表示されます。
git statusコンフリクトマーカーを読み解く
Gitは問題の箇所を示す特殊なマーカーを、コンフリクトしているファイルに直接挿入します。これらのマーカーによって、コードの異なるバージョンを確認できます。
<<<<<<< HEAD:現在のブランチの変更の開始位置を示します。=======:2つのブランチの変更を区切ります。>>>>>>> branch-name:取り込まれるブランチの変更の終了位置を示します。
コンフリクトしているファイルの内部
例を見てみましょう。hello.txtというファイルがあるとします。mainブランチではその内容を「Hello from main」に変更し、featureブランチでは同じ行を「Greetings from feature」に変更しました。featureをmainにマージすると、ファイルは次のようになります。
<<<<<<< HEAD
Hello from main
=======
Greetings from feature
>>>>>>> featureコンフリクトを手動で解決する
まず、コンフリクトしているファイル(例:hello.txt)をテキストエディターで開きます。次に、ファイルを手動で編集してコンフリクトマーカーを削除し、使用する内容を選択します。各部分を組み合わせたり、一方のバージョンを選んだり、まったく新しい内容を書いたりできます。
hello.txtの例で、両方のメッセージを残したい場合は、次のように編集します。
Hello from main and Greetings from feature!解決済みの変更をステージする
ファイルを手動で編集し、すべてのコンフリクトマーカーを削除したら、コンフリクトを解決したことをGitに伝える必要があります。ファイルをgit addでステージします。
git statusで「unmerged paths」として表示されたすべてのファイルについて、この操作を繰り返します。
git add hello.txtマージコミットを完了する
コンフリクトしているすべてのファイルをステージしたら、マージをコミットできる状態になります。通常、Gitがデフォルトのマージコミットメッセージを用意するので、そのまま使用するか、変更できます。この最後のコミットによって、マージ処理が完了します。
git commit -m "Merged feature branch, resolved conflict in hello.txt"コンフリクト解決チェック
マージコンフリクトを解決できました。では、コンフリクトしているファイルを手動で編集した後に行う、次の重要な手順について理解を確認しましょう。
まとめ:手動でのコンフリクト解消
マージコンフリクトを手動で解消する方法を学びました。これは、すべての開発者にとって基本となるスキルです。
- Gitが変更を自動的にマージできないと、コンフリクトが発生します。
git statusで、マージされていないファイルを確認できます。- コンフリクトマーカー(
<<<<<<<、=======、>>>>>>>)は、異なるコードを示します。 - ファイルを手動で編集し、マーカーを削除して、最終的な内容を選択します。
- 解消したファイルを
git addでステージします。 git commitでマージを完了します。
練習すれば、必ず上達します。コンフリクトは最初は難しそうに見えるかもしれませんが、この手順を使えば、すぐに解消できるようになります。
よくある質問
「マージコンフリクトの手動解決」レッスンは無料ですか?
はい。「マージコンフリクトの手動解決」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「マージコンフリクトの手動解決」で何を学びますか?
分岐したブランチを統合する際に発生するマージコンフリクトを手動で特定し、解決する方法を学びます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「マージコンフリクトの手動解決」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。