Gitでマージをした時、ファイルがコンフリクト(競合)してどうしたらいいかわからなくなったことありませんか?
この記事では、
- そもそもコンフリクトとは何か
- コンフリクトが発生した場合の対応
について、わかりやすく解説します。
コンフリクトした時の対応方法がわからない人はぜひチェックしてください!
- Xcodeでコンフリクトしたときの対応方法を知りたい人
- Gitの基本は知っている人
- この記事ではGitそのものについては解説しません
- macOS Sequoia 15.4.1
- Xcode 16.2
- Xcodeのマージ画面で必要な修正をする
- 解決時に任意の変更をすることも可能
- コンフリクトした場合、マージのキャンセルも可能
そもそもコンフリクトってなに?
マージ先とマージ元で同じ場所を変更した時に発生する競合のこと
コンフリクトとは、マージ先のブランチとマージ元のブランチで同じ場所を変更した時に発生する変更内容の競合のことです。
同じ場所を別々に変更しているため、
- どちらの変更を採用すべきか?
- それとも両方とも採用すべきなのか?
といったことが自動では判別できないために起こります。
そのため、コンフリクトが発生した場合は、ユーザーが手動で最終的にどういう形にすべきかを指定する必要があります。
実際のファイルは競合内容がわかるように一時的に修正されている
コンフリクト発生時、実際のファイルは競合の内容がわかるように一時的に修正されています。
例えば、コンフリクトしたファイルをテキストエディタで開くと以下のような感じです。
struct ContentView: View {
var body: some View {
VStack {
// gitでマージのテスト
// gitでno-ffマージのテスト
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
<<<<<<< HEAD
Text("feat 003")
=======
Text("feat 004!")
>>>>>>> feat_004
}
.padding()
}
}
この例は、ブランチfeat_004をマージしようとしてTextのところでコンフリクトが起こった場面です。
<<<<<<< HEAD
Text("feat 003")
=======
の部分が現在のブランチの内容で、
=======
Text("feat 004!")
>>>>>>> feat_004
がマージしようとした(取り込もうとした)feat_004ブランチでの変更内容です。
またGit上のファイルステータスも「コンフリクト中」になっています。
この内容を編集して整理し、ファイルステータスを正常に戻す(コンフリクト解決済みにする)のがコンフリクトが起こった時に行う対応です。
Xcodeでコンフリクトを解決するには?
マージ画面で必要な修正をする
Xcode上でコンフリクトが発生した場合、マージ画面が表示されます。
この画面で最終的にどういう内容にしたいのかを考えて必要は変更をすればいいです。

この画面では、
- 左側のソース
- 現在のブランチの内容
- 最終的にこの画面の内容が残る
- 右側のソース
- マージしようとしている(取り込もうとしている)ブランチの内容
となっています。
元々ある選択肢は、
- 左側の変更を選択(Choose Left)
- 右側の変更を選択(Choose Right)
- 左側の変更の後ろに右側の変更を追加(Choose Left Then Right)
- 右側の変更の後ろに左側の変更を追加(Choose Right Then Left)
だけですが、それ以外の変更をしたい場合もあると思います。
そのようなときは、「左側の変更を選択」などを選択した後、左側のソースを直接編集することで任意の内容に変更できます。

すべての競合箇所に対応した後、左下の「Merge」ボタンを押せば解決完了です!
やっぱりマージをやめたい場合はキャンセルできる
マージしようとしたらコンフリクトが発生した・・・、やっぱりマージをやめたいな。
そんなふうに思ったときは、マージ画面の左下にある「Cancel」ボタンでいつでもマージを中止できます。
コメント