0
1

【ざっくり分かるGit】鶏と卵と図で分かるマージの種類

Last updated at Posted at 2024-05-11

早めの結論

dev から feat ブランチを切って作業しており,
feat の変更内容を dev にマージしたいとします

abstract.png

  • fast-forward マージ(早送りマージ)
    • dev で変更が無かったマージ
    • feat ブランチの変更内容を dev の後に付け加えられるマージ
    • 卵が先で鶏はいないの
  • no-fast-forward マージ(3-wayマージ)
    • dev に変更があったマージ
    • feat の変更内容を取り込みましたよっていうコミット(マージコミット)が作られる
    • マージコミットがあるので,変更がどっから切ったブランチのやつだったかが分かる
    • 鶏が先で卵が後
  • squash マージ(スカッシュマージ)
    • dev に変更があったマージ
    • devfeat の変更を一つのコミットにまとめる(マージコミットを作らない)
    • マージコミットが無いので,変更がどっから切ったブランチのやつだったかは分からない
    • 鶏が先で,卵はいないように見えるが実はいつの間にかいたの

fast-forward マージ(早送りマージ)

前提

dev ブランチから feat ブランチを切ってそこで chiken.txt を作成(B)
feat で作業している最中に dev ブランチは特に変更されていない
この状況で dev ブランチに feat ブランチをマージしたい

fast-forward.png

マージ

# git merge --ff-only {取り込みたいブランチ名} 
git merge --ff-only feat

素直に A の後に B がくっつきます

fast-forward_r.png

ログ

一本のきれいなログになっています

fast-forward-log-graph_r.png

no-fast-forward マージ(3-wayマージ)

前提

dev ブランチから feat ブランチを切ってそこで chiken.txt を作成(B)
feat で作業している最中に dev ブランチで egg.txt が作成される(C)
この状況で dev ブランチに feat ブランチをマージしたい

start.png

マージ

# git merge --no-ff {取り込みたいブランチ名} 
git merge --no-ff feat

dev ブランチに feat ブランチの変更内容を取り込んだよという
マージコミット(M)が作られます
変更がどのブランチから切られたブランチでの変更なのかがわかります

no-fast-forward.png

ログ

no-fast-forward-log-graph_r.png

squash マージ(スカッシュマージ)

前提

no-fast-forward マージと同じです

マージ

# git merge --squash {取り込みたいブランチ名} 
git merge --squash feat

feat ブランチの変更内容(B)がしれっと dev ブランチに取り込まれます

squash.png

ログ

fast-forward の時のようにきれいな一本のログになります

squash-log-graph_r.png

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1