Visual Studio でのマージの競合を解決する
一方のブランチを他方のブランチにマージすると、一方のブランチでのコミットによるファイルの変更が、他方での変更と競合する可能性があります。 Git では、ご利用のリポジトリ内の履歴を使用して、マージされたファイルがどのようにあるべきかを判断することで、これらの変更の解決を試みます。 変更をマージする方法が明確ではない場合、Git によってマージは停止され、競合しているファイルが通知されます。
マージの競合を理解する
次の図は、Git 内で変更の競合がどのように発生するのかを示す基本的な例です。 この例では、メイン ブランチと bugfix ブランチでソース コードの同じ行に対して更新が行われています。
bugfix を main の方にマージすることを試みた場合、マージされたバージョンでどちらの変更を使用すればよいかは、Git には判断できません。 変更は、メイン ブランチ、bugfix ブランチ、またはこの 2 つの組み合わせで保持することが必要になる可能性があります。 この競合を解決するには、メイン ブランチ上でマージ コミットを使用して、2 つのブランチ間で競合する変更を調整します。
マージ競合が発生するシナリオとしては、リモート ブランチから自分のローカル ブランチに更新プログラムをプルする場合 (たとえば、origin/bugfix から自分のローカル bugfix ブランチへ) が最も一般的です。 このような競合も同じ方法で解決できます。つまり、自分のローカル ブランチ上で変更を調整するコミットを作成し、マージを完了します。
マージの競合を防ぐ
コミット間でファイルの内容が大幅に変更されない限り、Git ではほとんどの状況でファイルの変更が優れた方法で自動的にマージされます。 使用しているブランチが自分のメイン ブランチよりはるかに遅れている場合は、pull request を開く前にブランチのリベースを検討してください。 リベースされたブランチは、競合することなく main ブランチにマージされます。
マージ競合を解決する
同じブランチ上の他のユーザーと共同作業を行っている場合、変更をプッシュするときにマージの競合が発生する可能性があります。
作業しているローカル ブランチがそのリモート追跡ブランチより遅れているかどうかが Visual Studio で検出され、選択可能なオプションが提示されます。
Note
使用しているリモート リポジトリで強制プッシュがサポートされている場合は、[Git]>[設定] を使用して、それを有効にすることができます。
この例では、リモート リポジトリに導入された変更を含めるために、[プル後にプッシュ] を選択します。 変更をプルするときに、または 2 つのブランチのマージを試みるときにマージの競合が存在する場合は、[Git 変更]ウィンドウ、[Git リポジトリ] ウィンドウ、および競合を含むファイルにおいて、Visual Studio から通知されます。
[Git 変更] ウィンドウの [マージされていない変更] の下には、競合を含むファイルの一覧が表示されます。 競合の解決を開始するには、ファイルをダブルクリックします。 または、競合を含むファイルをエディターで開くには、[マージ エディターを開く] を選択できます。
マージ エディターで、次の方法のいずれかを使用して競合を解決する作業を開始できます (番号の付いたスクリーンショットに示すとおり)。
- 競合を 1 行ずつ確認し、右側または左側のどちらを保持するかを、チェックボックスをオンにすることで選択します。
- 競合している変更のすべてを保持または無視します。
- [結果] ウィンドウでコードを手動で編集します。
マージ競合の解決が完了したら、[マージの許可] を選択します。 競合しているすべてのファイルに対してこのプロセスを繰り返します。
[Git 変更] ウィンドウを使用してマージ コミットを作成し、競合を解決します。
Note
ファイルに加えた変更をすべて保持する必要がある場合は、[マージされていない変更] セクションでそれを右クリックし、[現在を保持 (ローカル)] を選択してください。マージ エディターを開く必要はありません。
ヒント
使用可能なアクセシビリティ オプションの詳細については、「Visual Studio のアクセシビリティのヒントとテクニック」ページの「Git キーボード ショートカット」セクションを参照してください。
関連するコンテンツ
フィードバック
https://aka.ms/ContentUserFeedback。
近日公開予定: 2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub イシューを段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、以下を参照してください:フィードバックの送信と表示