

はじめに
アプリ開発において「Git」は必須スキルとなってきます。Gitには様々なコマンドがあり、それらを使いこなすことで、開発作業の安全性の向上と効率化を図ることができます。基本コマンドは使い慣れているけれど、その他のコマンドは使ったことがない、Gitの知識を広げたいと思っている方向けに、今回は「git fetch」を解説します。あまり馴染みのないコマンドかもしれませんが、実はgit pullと関係のあるコマンドです。
様々なGitコマンドを習得し、Gitマスターを目指しましょう!
「git fetch」の解説の前に、まずはGitのリポジトリの種類と構造について学びましょう。
Gitのリポジトリの種類について
Gitシステムにおけるリポジトリには、リモートリポジトリとローカルリポジトリの2種類があります。
-
リモートリポジトリ
ネットワーク上のサーバーや社内サーバーで運用されるリポジトリで、チームメンバー間でファイルやディレクトリを共有するために使用されます。
※この記事でのリモートリポジトリはGitHubを利用している想定で解説します。
-
ローカルリポジトリ
個々のユーザーのPC環境(ローカル環境)に存在するリポジトリで、個人の開発作業スペースとして使用されます。
ローカルリポジトリの構造について
リポジトリとは、ファイルやディレクトリの状態を保存する場所です。コードの変更履歴を保存し、必要な時にアクセスして履歴を追えるようにする場所でもあります。
ローカルリポジトリには、以下の要素があります。
-
ワークツリー
ユーザーが実際にファイルの編集や作業を行なうローカルリポジトリのディレクトリです。
-
インデックス
リポジトリに保存されている情報とワークツリーとの変更履歴を記録する場所です。次に行う、コミットのための変更を一時的に記録するためのエリアです。
-
ローカルブランチ
ローカルリポジトリで管理されているブランチです。
-
リモート追跡ブランチ
リモートブランチの状態を追跡するブランチです。
リモート追跡ブランチとは
リモートリポジトリの状態を保持する参照です。参照とはリモートリポジトリの最新のコミットを指し示すためのポインタです。ポインタがあることで特定のコミットの履歴を追えたり、最新のブランチがどの様な状態かを知ることができます。

リモート追跡ブランチは、それぞれのリモートブランチの更新履歴を追跡します。

「git fetch」について
git fetchは、リモートリポジトリの最新の履歴を取得し、そのデータをローカルのリモート追跡ブランチに反映させるコマンドです。ローカルブランチには取得したデータは反映されません。これに対して、git pullはリモートリポジトリの最新の履歴を取得し、そのデータはローカルブランチにマージされます。
リモートブランチの最新の変更を確認したいが、ローカルブランチにマージしたくない場合にはgit fetchが便利です。git fetchを実行すると、リモートリポジトリの全てのブランチを参照できるようになり、ローカルでリモートブランチの内容を確認したり、必要に応じて特定のブランチを手動でマージすることが可能になります。

リモートリポジトリから取得した最新の状態をローカルブランチに反映させたい場合は、git mergeを使用する必要があります。git fetchでリモートの変更を取得した後にgit mergeを実行することで、git pullを使用したときと同じ結果になります。
git pullを実行すると、内部的にはまずgit fetchが呼び出され、次にgit mergeが実行されます。この記事の冒頭で触れたgit fetchとgit pullの関係がここにあります。このように、git fetchとgit pullの関係性を理解することは、Gitの操作をより柔軟に扱う上で重要です。

「git fetch」の使い方
リモートリポジトリの最新の状態をローカルのリモート追跡ブランチへ取り込みます。
git fetch
git fetchの実行結果です。リモートリポジトリにあるfeature#2とfeature#3のブランチの最新履歴を取得し、ローカルリポジトリにそれぞれのリモート追跡ブランチが作成されました。
git fetch
From github.com:sample-remote/sample-repository
* [new branch] feature#2 -> origin/feature#2
* [new branch] feature#3 -> origin/feature#3
「git fetch」コマンドの開発現場での活用例
-
最新の変更を取得
プロジェクトの最新の変更を確認したいがローカルブランチにマージしたくない場合、
git fetchを使用し、リモート追跡ブランチに最新の状態を取り込みます。これにより、ローカルブランチにマージすることなく、リモートリポジトリの状態をローカルで確認する事ができます。 -
特定のブランチの変更を取得
作業中にブランチ以外に状態を確認したいリモートブランチがある場合、そのブランチの最新の変更を取得するために
git fetchが使用されます。例えば、特定のブランチの最新の変更を取得したい場合は、ブランチを指定する事で可能になります。コマンド内容は「オプション紹介セクション:オプション <remote> <branch> 」で説明します。 -
リモートリポジトリの変更をローカルブランチにマージする前の確認
リモートリポジトリの変更をローカルで作業中のブランチに統合したい場合、マージ作業前に
git fetchでリモートの最新状態をローカルで取得します。そして、変更を確認し問題が無いことを確かめてからマージすることができます。この2段階のアプローチで、安全にローカルブランチへ最新の状態を反映する事ができます。 -
プルリクエストの最新状態を確認
チームメンバーのプルリクエストを更新した場合、その最新状態をローカルで確認するために
git fetchを使用して、対象のリモートブランチの最新コミットを取得することができます。これにより、ローカルで対象のブランチの状態を確認することができます。以下のコマンドで対象の最新コミットを取得します。git fetch origin pull/ID/head:BRANCHNAMEIDはプルリクエストのID、BRANCHNAMEはローカルで作成する新しいブランチの名前を指定します。
「git fetch」のオプション紹介
| 項目 | 説明 |
|---|---|
| <remote> <branch> | 指定したリモートリポジトリの特定のブランチの履歴のみをfetchする |
| --prune, -p | 不要なリモート追跡ブランチを削除する |
| --tags, -t | リモートリポジトリの新しいタグをすべて取得する |
| --dry-run | リモートリポジトリから何がfetchされるかを、実際のデータ取得前に確認できる |
<remote> <branch>
指定したリモートリポジトリの特定のブランチのみをfetchします。
git fetch <リモートリポジトリ名> <リモートリポジトリブランチ名>と指定する事で特定のブランチの最新の状態を取得します。
git fetch origin feature#2
git fetch origin feature#2を実行した結果です。指定したfeature#2ブランチをローカルリポジトリにfetchし、リモート追跡ブランチが作成されました。
git fetch origin feature#2
From github.com:sample-remote/sample-repository
* branch feature#2 -> FETCH_HEAD
* [new branch] feature#2 -> origin/feature#2
--prune, -p
リモートリポジトリで削除されたブランチをローカルリポジトリからも削除します。不要になったリモート追跡ブランチをクリーンアップするのに便利です。
git fetch --prune または -p
こちらは現在のリモートリポジトリの状態です。feature#2ブランチが削除されました。
git ls-remote
From github.com:sample-remote/sample-repository
6fbf0c42a5a1f92d9fe857edd61ca1fe434f58c0 HEAD
0a894d5f30b786a5fcc5c500b834a66e22156973 refs/heads/feature#1
6fbf0c42a5a1f92d9fe857edd61ca1fe434f58c0 refs/heads/main
ローカルリポジトリの現在の状態です。feature#2のリモート追跡ブランチが残っています。
git branch -a
* main
remotes/origin/HEAD -> origin/main
remotes/origin/feature#1
remotes/origin/feature#2
remotes/origin/main
git fetch --pruneを実行した結果です。origin/feature#2のリモート追跡ブランチが削除されました。
git fetch --prune
From github.com:sample-remote/sample-repository
- [deleted] (none) -> origin/feature#2
git branch -a
* main
remotes/origin/HEAD -> origin/main
remotes/origin/feature#1
remotes/origin/main
--tags, -t
リモートリポジトリの新しいタグをすべて取得します。リリースやバージョンタグをローカルリポジトリで追跡する際に使用します。
git fetch --tags または -t
リモートリポジトリには以下の2つのタグがあります。

git fetch --tagsを実行後、ローカルリポジトリのタグを確認した結果です。ローカルにリモートリポジトリにあるタグが取得できました。
git tag
v1.0.0
v1.0.1
--dry-run
リモート追跡ブランチには変更を適用せずリモートリポジトリから何がfetchされるかを、データ取得前に確認することができます。fetchを実際に実行する前に、どのような変更が行われるかを確認したいときに使用されます。
git fetch --dry-run
git fetch --dry-runを実行した結果です。リモートリポジトリから新しいブランチfeature#2がfetchされるという事が確認できます。
git fetch --dry-run
From github.com:sample-remote/sample-repository
* [new branch] feature#2 -> origin/feature#2
git fetch --dry-runを実行した後に、ローカルリポジトリのブランチを確認した結果です。feature#2のリモート追跡ブランチは作成されてません。git fetch --dry-runはfetchをすると何のアクションが発生するかを確認するだけということが分かります。
git branch -a
* main
remotes/origin/HEAD -> origin/main
remotes/origin/feature#1
remotes/origin/main
この記事で学んだこと
この記事を通じて、「git fetch」に関連するさまざまな知識を得ることができました。簡単に振り返ってみましょう。
「git fetch」について
git fetchは、リモートリポジトリの最新の履歴を取得し、そのデータをローカルのリモート追跡ブランチに反映させるコマンドです。ローカルブランチには取得したデータは反映されないため、ローカルブランチにマージせずにリモートリポジトリの最新の変更を確認したい場合に便利です。
「git fetch」と「git pull」の関係性
git fetchはローカルのリモート追跡ブランチに取得したデータを反映しますが、取得したデータをローカルブランチに反映するにはgit mergeが必要になります。対してgit pullは取得したデータを直接ローカルブランチにマージします。
git pullを実行すると、内部的にはまずgit fetchが呼び出され、次にgit mergeが実行されます。このようなgit fetchとgit pullの関係性がありました。
リモート追跡ブランチについて
リモート追跡ブランチは、リモートリポジトリの状態を反映する参照です。リモートの最新の状態をローカルに保持できることで、リモートの状況を確認しながら安全に開発を進めることが可能になります。
この記事では、「git fetch」の基本から実際の利用法に至るまで、その活用法を詳しく解説してきました。
ぜひこのコマンドを日々の学習に取り込み、実践を積んで理解を深めていきましょう!
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

関連記事

2024.06.02
リポジトリ内の探しものは「git grep」で効率的な検索テクニックを紹介
「git grep」コマンドを使用すると、リポジトリ内のファイルを一度に検索することができて、とても便利なのです。そんなリポジトリ内を一斉検索できる便利なコマンド、「git grep」をこの記事で解説します。
- git

2025.09.29
gitのコミット履歴を整理するためにsquashを使いこなそう
Squashは、複数のコミットを1つのコミットにまとめる操作です。Squashを使用すると、コミットの履歴を整理したり、コミットのメッセージや変更内容を変更したりすることができます。
- インフラエンジニア
- git

2025.06.26
git switch完全ガイド|初心者でも安全にブランチを切り替える使い方とハンズオン
git switchは、ブランチを切り替えるための専用コマンドです。従来のgit checkoutよりもシンプルでわかりやすく、初心者でも安全に使えるのが大きな特長です。
- git

2024.05.27
Gitコマンドでバグが混入したコミットを見つける!便利な「git bisect」コマンドを徹底解説
バグの原因となったコミットが何なのか最速で知りたい!という方向けに、この記事では「git bisect」コマンドについて解説します。
- git


