🔀
Gitマージの3つの方法まとめ(Fast-forward, 3-way, Squash)
Gitで使用される代表的なマージ方法3つを、簡単な例と共にまとめました。
1️⃣ Fast-forwardマージ
✅ 特徴
- ブランチが一直線に繋がっている場合にのみ発生
- 単にコミットポインタを前に進めるだけ
- マージコミットは作成されない
📌 例
main: A---B
feature: \---C---D
(マージ時)
main: A---B---C---D
💡 コマンド
git checkout main
git merge feature # Fast-forwardでマージされる
2️⃣ 3-wayマージ
✅ 特徴
- ブランチが分岐した後、両方で作業が行われた場合に発生
- 共通の祖先コミットを基準にマージ
- 新たなマージコミットが作成される
📌 例
A
/ \
B C
(マージ時)
A
/ \
B C
\
M ← マージコミット
💡 コマンド
git checkout main
git merge feature
⚠️ 注意
- コンフリクトが発生する可能性があり、手動で解決してからコミットが必要
3️⃣ Squashマージ
✅ 特徴
- 複数のコミットを1つにまとめてマージ
- コミット履歴をきれいに保つことができる
- ブランチの接続情報は残らない
📌 例
feature: B---C---D
(merge --squash時)
main: A---M ← squashされたコミット
💡 コマンド
git checkout main
git merge --squash feature
git commit -m "機能の要約コミット"
⚠️ 注意
- コンフリクトが発生した場合でも手動で解決してからコミットが必要
- ブランチ間の接続関係は残らない(git logでは分岐が表示されない)
🧠 まとめ表
方法 | マージコミット | コミット履歴 | コンフリクト時 | ブランチ接続 |
---|---|---|---|---|
Fast-forward | ❌ なし | 維持 | 起こりにくい | 維持 |
3-wayマージ | ✅ あり | 維持 | 手動で解決必要 | 維持 |
Squashマージ | ✅ 1つに圧縮 | 圧縮される | 手動で解決必要 | ❌ 接続されない |
状況に応じて適切なマージ方法を選びましょう。
Discussion