git merge と 4種類の結果について
git merge とは?
複数のブランチを 1 つのブランチに統合するコマンドです。
merge コマンドは、元のブランチと分岐したブランチを統合した新しいコミットを作成します。
gitで merge 後の結果には 下記のような種類があります。
Already up to date
mergeするブランチ同士のコミット内容に差分が無く、mergeする必要がなかった状態。
Fast Forward(早送りになるmerge)
現在のブランチの先端から対象ブランチに向かって 1 本の直線的なパスのみが通っている状態。
fast-forward な関係や状態といわれたら、merge 元ブランチ(merge した内容を持つブランチ)の内容はすでに merge 先にあるという状態のことを指します。
fast-forward な関係にある時に pull すると、実際には merge は発生しないので、conflict は発生しません。
fast-forward merge すると、merge 先ブランチにないコミット内容が追加され、merge 先ブランチは、追加した新しいコミットにブランチが移動します。
fast forward merge のイメージはこちらのリンクの中にある画像が参考になります。
Auto Merge(単純な merge)
merge するブランチ同士のコミット内容の差分に、同じファイルの同じ箇所に変更がなく、自動で merge を行うことができた状態のこと。
イメージ図は、下記の通り。
Conflict(コンフリクト、競合)
同じファイルの同じ場所に複数の修正が行われた時に発生し、conflict 発生時は conflict が発生したファイルのみ merge されず、発生時にはどちらの修正内容を反映させるのか吟味しながら修正しなければならない状態のこと。
(conflictはstashの適用時にも発生する可能性あり。)
イメージは下記の通り。
Conflict の修正作業が完了したら、作業ツリーからステージへ add すると conflictの修正を完了したものとみなされる。
その時、conflictを修正したファイルに誤りがあった場合であっても簡単に戻すこともできる。
また、conflictする前の状況にも簡単に戻すこともできる。
参考
書籍
https://www.amazon.co.jp/Gitが、おもしろいほどわかる基本の使い方33-改訂新版-大串-肇-ebook/dp/B07T5995HK
git merge について
https://www.atlassian.com/ja/git/tutorials/using-branches/git-merge#:~:text=マージコミットには 2,結合することはできません。
Discussion
素晴らしい記事をありがとうございます😊
git使わない日は無いですが、gitコマンドはなるべく目に入れたくない派です💦 なので枝は常に一本しか生やさないのですが、なにかの拍子に間違うと、冷や汗が出てきます…。
ですので、このような丁寧な記事にはとても助けられています😄 ありがとうございます✨
yKesamaru さん
はじめまして。私が作成した記事へのコメントありがとうございます!
自分も正直 git 苦手です😅 なので、いつも困った時はチームメンバーに助けてもらっています。
エンジニアという職業に就かせていただいてからおよそ1年経ったので、そろそろ本格的に学び直さないといけないと思い、今回の記事を作成しました。
yKesamaru さんの全ての記事に目を通したわけではないですが、yKesamaru さんの記事は内容も面白く、記事構成もわかりやすくとても参考になります。
(自分は、特にこの記事( https://zenn.dev/ykesamaru/articles/fe206cc8b27833 )が お気に入りです😊)
これからもお互いわかりやすく誰かのためになるような記事を作成していきましょう!!