メインコンテンツ

プログラムによる Git ブランチのマージおよび競合の解決

この例では、MATLAB® ソース管理 API を使用してブランチを作成およびマージし、競合を解決する方法を示します。

新しい Git リポジトリの作成

現在のフォルダーに新しい Git™ リポジトリを作成します。

repo=gitinit();

リポジトリへのファイルの追加

README.md ファイルを作成してリポジトリに追加します。

writelines("Questions?","README.md");
add(repo,"README.md");

ファイルの変更をコミットします。

commit(repo,Message="Add README file");

ブランチの作成

タスク用に 2 つのブランチを作成します。

Task1Branch = createBranch(repo,"Task1");
Task2Branch = createBranch(repo,"Task2");

ブランチでのファイルの変更

Task1 ブランチで、行「Contact example@mailinglist.com」を追加して README ファイルを更新します。次に、変更をコミットします。

switchBranch(repo,"Task1");
writelines("Contact example@mailinglist.com","README.md",WriteMode="append");
commit(repo,Message="Modify README in Task1 branch");

Task2 ブランチで、行「Create an issue」を追加して README ファイルを更新します。次に、変更をコミットします。

switchBranch(repo,"Task2");
writelines("Create an issue","README.md",WriteMode="append");
commit(repo,Message="Modify README in Task2 branch");

ブランチのマージ

Task1 ブランチを Task2 ブランチにマージします。merge 関数は、README ファイル内の競合のためマージを完了できないと報告します。

try
   merge(repo,"Task1")
catch
     % The merge function throws an expected error because this branch merge
     % results in a conflict.
     fprintf("Unable to merge Task1 into Task2.\n\nCaused by:\n" + ...
         "Conflicted files: README.md\n\nResolve and " + ...
         "commit conflicted files to complete the merge.")
end
Unable to merge Task1 into Task2.

Caused by:
Conflicted files: README.md

Resolve and commit conflicted files to complete the merge.

Files panel with a conflicted file

README ファイルを開いてその内容を調べます。

edit README.md

Questions?

<<<<<<< HEAD

Create an issue

=======

Contact example@mailinglist.com

>>>>>>> ebc20d468cc6b8255130ccb2350b7d5db8d863f3

競合の解決

比較ツールおよびマージ ツールを使用するか、README ファイルを編集して競合を解決します。競合を対話的に解決する方法については、テキスト ファイルのマージを参照してください。

この例では、両方の変更を保持するとします。両方の変更を保持するには、単に競合マーカーを削除します。

writelines("Questions?","README.md");
writelines("Contact example@mailinglist.com","README.md",WriteMode="append");
writelines("Create an issue","README.md",WriteMode="append");

add関数を使用して、README ファイル内の競合を解決済みとしてマークします。次に、マージの解決をコミットします。

add(repo,"README.md")
commit(repo,Message="Resolve Conflict");

参考

gitclone | gitrepo | commit | createBranch | switchBranch | merge

関連するトピック

Git ソース管理の設定

Git ブランチの作成、管理、およびマージ

関連する例

Simulink 3-way マージを使用したプロジェクト内の競合の解決 (Simulink)