メインコンテンツ

Git 競合の解決

この例では、Git™ ソース管理下のファイルで共同作業を行うときに競合を解決する方法を示します。新しいブランチを作成し、変更を加えてから、その変更を main ブランチにマージします。ブランチのマージにより競合が発生します。

[コマンドのコピー] ボタンを使用して、Git ソース管理下のサンプル リポジトリを開きます。サンプル リポジトリには、競合の原因となったブランチのマージがあります。マージに競合がない場合は、Git Remote へのプッシュで説明されているように、リモート リポジトリにプッシュすることでローカルの変更を共有できます。

まだブランチを作成していない場合は、Git ブランチの作成、管理、およびマージを参照してください。

競合のあるファイルの特定

[ソース管理] Source Control panel icon パネルの変更済みファイルのリストで赤い警告シンボル Conflict icon を探して、競合のあるファイルを特定します。[ソース管理] アイコンがサイドバーにない場合は、[パネルをさらに開く] ボタン Open more panels icon をクリックし、[ソース管理] パネルを選択します。競合の警告シンボルは、[ファイル] パネルと [プロジェクト] パネルのソース管理列にも表示されます。

Source Control and Files panel stacked on the left and the Branch Manager on the right

ヒント: マージ操作中はいつでも、マージを破棄して、マージ前のリポジトリの状態に復元できます。[ブランチ マネージャー] ツールストリップで [マージの破棄] をクリックします。

競合の確認と修正

競合の詳細を調べるには、競合のあるファイルを右クリックして [競合を表示] を選択します。

Git repository in the Source Control panel with one file conflict

テキストベースのファイルの場合は、2-way マージ ツールが開きます。モデル ファイルの場合は、3-way マージ ツールが開きます。モデル内の競合を解決する場合は、代わりにResolve Conflicts in Models Using Three-Way Merge (Simulink)を参照してください。

テキスト ファイルのマージ

競合を修正するには、いずれかの変更内容を保持するか、両方を結合してからマージされたファイルを保存します。

既にコミットされているテキスト ファイルに競合マーカー <<<<<<< .mine が表示される場合は、競合マーカーを抽出してからファイルをマージします。詳細については、競合マーカーの抽出を参照してください。

ファイルは、左から右へのみマージできます。ソース管理の別のリビジョンと比較する場合、右側のファイルがローカル ブランチのバージョンになります。左側のファイルは、前のバージョンの一時的なコピー、または競合を引き起こしている別のバージョン (filename_theirs など) のいずれかです。比較レポートの上部で両方のファイルのファイル パスを確認します。次の手順に従って、左側のファイル (一時的なコピー) から右側のファイルへ差分をマージして競合を解決します。

1. 比較レポートで差分を選択し、[内容の置換] をクリックします。選択された差分が左のファイルから右のファイルへコピーされます。内容の置換を元に戻すには、[元に戻す] をクリックします。あるいは、インラインの [内容の置換] アイコンと [元に戻す] アイコンを使用します。レポートの先頭のマージされたファイル名に、変更未保存 (ダーティ) フラグ (filename.m*) が表示され、ファイルに保存されていない変更が含まれることがわかります。

この例では、[内容の置換] ボタンを使用して、右側のファイル内の変更と左側のファイル内の別のユーザーによる変更を組み合わせることにします。

Comparison report. Toolstrip on top. Side by side comparison of conflicted revisions with inline buttons to merge lines.

2. [確定して閉じる] をクリックするとマージされた変更が保存され、競合が解決済みとしてマークされます。

Merge report with pointer on the Accept & Close button in the toolstrip

ヒント: 代わりに自分のバージョンのファイルを保持するには、[確定して閉じる] をクリックする前に、[(結果)] ファイルに変更を加えないでください。

競合マーカーの抽出

ソース管理ツールでは、バイナリとして登録されていないファイル (SLX ファイルや MLX ファイルなど) に競合マーカーを挿入できます。MATLAB® を使用して、競合マーカーを抽出し、競合の原因となっているファイルを比較できます。このプロセスは、競合の解決方法を決定するのに役立ちます。

競合マーカーは次の形式で表されます。

<<<<<<<["mine" file descriptor]
["mine" file content]
=======
["theirs" file content]
<<<<<<<["theirs" file descriptor]

ヒント: ファイルをソース管理ツールに登録して、ファイルで競合マーカーの挿入やファイルの破損が生じないようにします。詳細については、バイナリ ファイルの Git への登録を参照してください。ファイルに競合マーカーが既に含まれている場合、MATLAB のツールが競合の解決に役立ちます。

競合とマークされていないファイルに競合マーカーが含まれていることがあります。これは、自分または別のユーザーが、競合マーカーを削除せずに競合解決済みとしてマークし、ファイルをコミットした場合に発生します。競合があるとマークされていないファイルに競合マーカーが確認された場合、次の手順に従って競合マーカーを抽出できます。

1. [ファイル] パネルまたは [プロジェクト] パネルでファイルを右クリックして [ソース管理][ファイルの競合マーカーのチェック] を選択します。

Conflict Markers dialog box showing the path to the reconstructed files and Merge Files and Close buttons at the bottom

2. MATLAB は、マージ前の元のファイルの内容を再構成し、[Mine] フィールドと [Theirs] フィールドにパスを表示します。

3. [ファイルのマージ] をクリックしてマージ ツールを開き、競合を解決します。テキスト ファイルのマージを参照してください。

マージ結果のコミット

ファイル内の競合を解決したら、結果のマージされたファイルをコミットします。[ソース管理] パネルで [コミット] をクリックします。

Commit dialog with an autogenerated merge commit message and one modified file to commit

自動生成されたマージ コミット メッセージが [コミット] ダイアログ ボックスに表示されます。マージを確定するには、[コミット] をクリックします。

メモ: 自分の変更のみを保持し、他のユーザーの変更を保持しなかった場合、MATLAB はローカルの変更を検出しないため、変更済みファイルのリストにはファイルが含まれません。マージを確定するにはコミットする必要があります。

Commit dialog with an autogenerated merge commit message and no modified files to commit

マージの競合を解決したら、ローカルの変更をプッシュして、変更を他のユーザーと共有します。詳細については、Git Remote へのプッシュを参照してください。

参考

ツール

関数

トピック