Git

【図解】git pullとgit fetch~git mergeの違い

マナビト
マナビト
こんにちはマナビトです。
普段はフロントエンドエンジニアとしてJavaScript/TypeScript/Aangular/GraphQLを
メインに開発業務を行なっています。

今回は、git pullとgit fetch~git mergeの違いについて述べていきたいと思います。これからGitについて学ぼうとされている方や、普段pullやfetchを何となく使っている方向けで記事を書いています。

git fetchとgit pullは両方とも、リモートリポジトリにある最新情報を、ローカルリポジトリへ持ってくる操作であることを意味しますが、ローカルリポジトリへ持ってくるまでの流れが異なります。

1. リモートリポジトリとローカルリポジトリ

本題に入る前に、gitにおけるリモートリポジトリとローカルリポジトリについて、簡単に触れておきたいと思います。

リポジトリとはファイルやディレクトリを管理する場所です。リモートリポジトリは専用のサーバーにファイルやディレクトリを配置して、複数人で共有するためのリポジトリです。ローカルリポジトリはそのデータを自身のPC上に持ってきて作業する場所になります。

2. リモート追跡ブランチとは?

fetchなどを理解する上で欠かせないのが、リモート追跡ブランチです。追跡ブランチは、リモートリポジトリをクローンした際に、ローカルリポジトリ上で作成される、リモートリポジトリの更新を追いかける(文字通り追跡する)ためのブランチです。

gitを確認してみると、ローカル上に存在する「origin/master」と表記されているものがあり、それがリモート追跡ブランチです。

リモート追跡ブランチは下記記事に詳しく記載されています。

ちなみに、今回はmasterと表記していますが、もしブランチ名がtestの場合リモート追跡ブランチ名は「origin/test」となります。

3. git fetch (リモートからの情報を取得する)

fetchはその名の通り、情報を取ってくるを意味します。

fetchとはリモートリポジトリにある最新情報をリモート追跡ブランチに持ってくるコマンドです。リモート追跡ブランチが最新情報に更新されるだけなので、ローカル内のファイルが更新されるわけではありません。この点がgit pullと違うとことです。

4. git merge

git mergeはリモート追跡ブランチにある情報を、自身のワークツリーに持ってくることが出来ます。ワークツリーに反映されるため、自身のファイルが最新状態に置き換わります。

5. git pull

git pullは上のmergeとfetchの両方を一気に行い処理するコマンドです。「git pull = git fetch + git merge」だと考えてもらえればと思います。pull自体は便利なコマンドですが、コンフリクトしてしまう可能性がある為、慣れないうちはgit fetchしてから、git mergeする段階を踏んだ方が良いかもしれません。

本日はここまでとなります。最後までお読み頂きありがとうございました。

この記事を執筆するにあたり参考にした文献