ブランチ

git merge

別のブランチの変更を現在のブランチに統合します。機能ブランチで完成した変更をメインブランチに取り込む際に使います。

構文 git merge <branch>

オプション

フラグ 説明
--no-ff Fast-forward マージを禁止し、常にマージコミットを作成します。ブランチの存在を履歴に残したい場合に使います。
--squash マージされる側のコミット履歴をすべて1つにまとめてステージングします(コミットは別途行う必要があります)。
--abort コンフリクトが発生したマージ操作を中断し、マージ前の状態に戻します。
--ff-only Fast-forward でマージできる場合のみ実行し、コンフリクトや分岐がある場合は失敗します。

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