git fetchとmerge、pullの関係をわかりやすく説明する【Gitコマンド解説②】
Gitコマンドはたくさんありますよね。git addとcommit,pushなどは良く使うコマンドだからわかるけど、
fetch、merge、pullになると「どういう意味かわからない...」という方は多いのではないでしょうか。
git fetch
git merge
git pull
今日は3つのGitコマンドについて、できるだけわかりやすく解説していきます。
そもそもgit addとcommit,pushがわからない! という方は、こちらの記事を読んでくださいね。
git pullは、fetchとmergeの両方を組み合わせたコマンド
上記の記事で、ローカルリポジトリの内容をリモートリポジトリに送信(アップロード)することを**「push」**と呼びましたね。
反対に、リモートリポジトリからローカルリポジトリを更新することを 「pull」 と呼びます。
画像引用:https://backlog.com/ja/git-tutorial/intro/02/
例えば、A君とB君がチーム開発しているとします。A君が更新したファイルをBくんにも反映させたいです。
これを実現する流れは、以下のようになります。
1.A君がローカルリポジトリの内容をリモートリポジトリに送信(アップロード)する(push)
2.B君がリモートリポジトリからローカルリポジトリを更新する(pull)
これがpullの役割です。見出しには 「git pullは、fetchとmergeの両方を組み合わせたコマンド」 と書きました。以下のような関係式が成り立ちます。
pull = fetch + merge
ここでfetchとmergeの意味がわからない!となったと思うので、それぞれ解説していきます。
git fetchでリモートからローカルに持ってきて、git mergeでローカルを更新する
リモートリポジトリから最新情報をローカルリポジトリに持ってくることを 「fetch」 と呼びます。また、fetchを使ってローカルに持ってきた最新情報を更新することを 「merge」 と呼びます。mergeには「統合する、融合させる」という意味があります。
さきほどの関係式をわかりやすくすると、こんな感じです。
pull(リモートから持ってきて更新) = fetch(リモートから持ってくる) + merge(ローカルを更新)
「pullとfetchなにが違うの?」と思ったかもしれません。
pullとfetchの違いは、実際にファイルを更新するかどうかの違いです。mergeをしないとローカルが更新されないわけですね。
※個人開発の場合でも、ブランチを分けて作業することが多いと思います。ブランチで作業していた内容を統合させたいときにmergeコマンドを使うことになります。リモートリポジトリを共有するチーム開発だけで使うコマンドじゃないってことです。
まとめ
1.リモートリポジトリから最新情報をローカルリポジトリに持ってくることを 「fetch」 と呼ぶ
2.fetchを使ってローカルに持ってきた最新情報を更新することを 「merge」 と呼ぶ
3.「pull」 はmergeとfetchをまとめて行うコマンド
これで、git fetchとmerge、pullの関係について理解が深まったかと思います。
Discussion