🌟

git fetchとmerge、pullの関係をわかりやすく説明する【Gitコマンド解説②】

2022/02/10に公開

Gitコマンドはたくさんありますよね。git addとcommit,pushなどは良く使うコマンドだからわかるけど、

fetchmergepullになると「どういう意味かわからない...」という方は多いのではないでしょうか。

git fetch
git merge 
git pull

今日は3つのGitコマンドについて、できるだけわかりやすく解説していきます。

そもそもgit addとcommit,pushがわからない! という方は、こちらの記事を読んでくださいね。
https://zenn.dev/atsushi101011/articles/4e0e36d238a3b8

git pullは、fetchとmergeの両方を組み合わせたコマンド

上記の記事で、ローカルリポジトリの内容をリモートリポジトリに送信(アップロード)することを**「push」**と呼びましたね。

反対に、リモートリポジトリからローカルリポジトリを更新することを 「pull」 と呼びます。

Image from Gyazo
画像引用: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(ローカルを更新)

pullfetchなにが違うの?」と思ったかもしれません。

pullとfetchの違いは、実際にファイルを更新するかどうかの違いです。mergeをしないとローカルが更新されないわけですね。

※個人開発の場合でも、ブランチを分けて作業することが多いと思います。ブランチで作業していた内容を統合させたいときにmergeコマンドを使うことになります。リモートリポジトリを共有するチーム開発だけで使うコマンドじゃないってことです。

まとめ

1.リモートリポジトリから最新情報をローカルリポジトリに持ってくることを 「fetch」 と呼ぶ
2.fetchを使ってローカルに持ってきた最新情報を更新することを 「merge」 と呼ぶ
3.「pull」 はmergeとfetchをまとめて行うコマンド

これで、git fetchとmerge、pullの関係について理解が深まったかと思います。

Discussion