git merge
別のブランチの変更を現在のブランチに統合します。機能ブランチで完成した変更をメインブランチに取り込む際に使います。
構文
git merge <branch> git merge は、指定したブランチの変更内容を現在のブランチに統合します。
基本的な使い方
# main ブランチに feature ブランチをマージ
git checkout main
git merge feature/login
マージの種類
Fast-forward マージ
マージ先のブランチにその後の変更がない場合、コミットは追加されずポインタが移動するだけです。
前: main: A → B
feature: A → B → C → D
後: main: A → B → C → D
git merge feature/login # Fast-forward が発生
マージコミット(3-way merge)
両方のブランチに独立した変更がある場合、新しい「マージコミット」が作成されます。
前: main: A → B → C
feature: A → B → D → E
後: main: A → B → C → M (マージコミット)
↗
D → E
git merge --no-ff feature/login # 常にマージコミットを作成
コンフリクトの解決
両方のブランチで同じファイルの同じ行を変更した場合、コンフリクト(競合)が発生します。
git merge feature/login
# CONFLICT (content): Merge conflict in src/index.js
コンフリクトが発生したファイルには以下のようなマーカーが挿入されます。
<<<<<<< HEAD
現在のブランチ(main)の内容
=======
マージするブランチ(feature/login)の内容
>>>>>>> feature/login
解決手順:
# 1. コンフリクトしているファイルを編集してマーカーを削除
# 2. 解決したファイルをステージング
git add src/index.js
# 3. マージを完了
git commit
コンフリクト解決をやり直したい場合:
git merge --abort