コンフリクトの解決

ブランチをマージしようとしたときに、 互いに同じファイルが編集されているとコンフリクトが発生する場合があります。

次の例をみてください。ブランチ A のマージを試みます。

$ git merge A
Auto-merging app1.c
CONFLICT (content): Merge conflict in app1.c
Auto-merging foo.c
CONFLICT (content): Merge conflict in foo.c
Automatic merge failed; fix conflicts and then commit the result.

すると、上のように CONFLICT が発生したことが表示されました。

この時、コンフリクトが発生したとレポートされたファイルは次のようになります。上の例では2ファイルコンフリクトが発生していますが、 片方の app1.c をみてみましょう。

$ cat app1.c
#include "foo.h"

int main(){
	foo();	
<<<<<<< HEAD
	printf("Bye @ master\n");
=======
	printf("Bye @ A\n");
>>>>>>> A
	return 0;
}
$

ファイル内にはマーカーが追加されています。この内容は次のような意味です。

<<<<<<< HEAD
	[現在のブランチのコンフリクト部分]
=======
	[マージするブランチのコンフリクト部分]
>>>>>>> [ブランチ名]

これらのコンフリクトを修正しないと、マージはできません。

マージツールの指定

手作業でマージを行う場合にはマージ用のツールを利用すると便利です。 git ではマージツールを起動することを補助する機能があります。

例えば次のように Meld をマージツールとして指定します。

$ git config merge.tool "meld"

そして、 git mergetool コマンドを実行すると、マージ作業の必要なファイルをマージツールで開いてくれます。

Meld

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Linux 入門