ATSU Tech Blog

Ruby on Rails, Pythonなどの記事を書いています。

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

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

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

git fetch
git merge 
git pull

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

そもそもgit addとcommit,pushがわからない!という方は、こちらの記事を読んでくださいね。 ↓↓↓ git addとcommit、pushの関係をわかりやすく説明する【Gitコマンド解説①】

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をまとめて行うコマンド<br><br>

これで、git fetchとmerge、pullの関係について理解が深まったかと思います。 次回は、git clone、log、branch、statusあたりのコマンドについて解説します。

この記事の説明がわかりやすかった!ここ間違ってるよ!次こんな記事を書いて欲しい!などあればコメント、DMよろしくお願いします。LGTMもぜひ。

Twitterもやってますので、フォローしていただけたらうれしいです。 卓球、心理学、哲学、Webサービス、好きな音楽、カメラ、登山、ランニング、読んだ本などなんでもつぶやいてます。

https://twitter.com/atsushi101011