Git fetch is a command that retrieves the latest information from a remote repository without reflecting it in your local environment, allowing you to check it first.
git fetch は、リモートリポジトリ上の最新のコミットやブランチ情報などを ローカルにダウンロードしてくる(同期する)ためのコマンドです。取得した内容は origin/main のような「リモート追跡ブランチ」に保存されます。まだ自分の作業ブランチ(例: main)には反映されません。つまり、ローカルの履歴には影響を与えず、あくまでも「情報を取得するだけ」という点が最大の特徴です。
最も基本的な使い方は以下のようになります。
Git Bash
git fetch <リモート名> <ブランチ名>
ただし、リモート名やブランチ名を省略すると、既定のリモート(通常はorigin)にある、あらゆるブランチを取得してくれます。
例:
Git Bash
# originリモートの全ブランチ情報を取得
git fetch
また、fetch を実行するとブランチだけでなくタグ情報も取得されます。これにより、リモートで新しいタグが作成されていれば、ローカルにも反映されます。
Git Bash
# originリモートのmainブランチの情報のみを取得
git fetch origin main
originという名前のリモートを使うことが多く、そのリモートとの同期をとりたいだけなら、ブランチ名も省略して git fetch とするだけで十分です。upstreamなど)、特定のリモートだけを指定して git fetch upstream のように明示的に書くこともあります。同じようにリモートから更新を取り込むコマンドとして、git pull がよく挙げられます。しかし両者には大きな違いがあります。
| コマンド | 動作 | 推奨されるシーン |
|---|---|---|
git fetch |
リモート上の更新を 取得するだけ。ローカルブランチには反映されない。 | 一旦ローカルには影響を与えずに新しい情報を確認したいとき |
git pull |
リモート上の更新を 取得&自動的にマージする。 ※設定を変更すると「リベース」で取り込むことも可能です(既定はマージ)。 |
最新の変更をすぐにローカルブランチへ反映したい時 |
多くの場合、中級者以上になると以下のワークフローが定着してきます。
git fetch でリモートの最新情報を取ってくるgit merge もしくは git rebase するこのフローによって、衝突が起きるかどうか、そして差分がどの程度発生しているかを事前に把握できます。そのため、「fetch → merge もしくは rebase」 というステップを分けることが推奨されることが多いです。
複数のリモートを使っている場合、それぞれのリモートに対して個別に git fetch するのは手間がかかります。そこで、以下のコマンドを使うと、存在している全リモートリポジトリの更新情報を一括で取得します。
Git Bash
git fetch --all
originやupstreamなど、設定されているすべてのリモートが対象になります。リモートのブランチが削除された場合、ローカル側にあるリモート追跡ブランチの参照(origin/削除されたブランチなど)が残ったままになることがあります。--prune オプションを使うと、存在しなくなったリモート追跡ブランチを自動的に削除してくれます。
Git Bash
git fetch --prune
--prune を定期的に行うのがおすすめです。fetch.pruneをtrueにする(git config --global fetch.prune true)と、自動的に常にpruneを実行するようにもできます。-p は --prune の省略形です。機能は同じで、コマンドを短く打つことができます。
もし特定のリモートブランチを、ローカル上の別名のブランチとして取得したい場合は、以下のように書きます。
Git Bash
git fetch origin feature/new-design:refs/remotes/origin/feature/new-design-backup
origin/feature/new-designの内容を、自分のローカルにorigin/feature/new-design-backupというリモート追跡ブランチとして取得できます。git fetch でリモートの最新情報を取得する。git checkout origin/feature/XXX のように、リモート追跡ブランチにチェックアウトしてコードを確認する。mainブランチへの直接マージの前に、他メンバーの作業との差分やコンフリクトの可能性を評価したい。git fetch で最新情報を取得する。git merge origin/main (または git rebase origin/main) でローカルブランチを更新する。git clone --depth=1 <リポジトリURL> などで浅いクローンを行い、対象ブランチのみを取得する。git fetch --prune --depth=1 origin feature/XXXX として特定のブランチの最新だけを取得する。リポジトリが大きく、履歴をすべて取得する必要がない場合は、--depth オプションで履歴を浅く取得できます。これによりダウンロード量を減らし、処理を高速化できます。
Git Bash
git fetch --depth=1 origin main
origin/main ブランチの直近1コミット分だけを取得します。git fetch --all --prune でローカルの参照を最新に保つ。git fetch した後にマージやリベースを行い、コンフリクトファイルを手動で修正。git branch -vv や git remote show origin で追跡関係を確認。git branch -d <ブランチ名> など)。git fetch --prune で整合性を保つ。git fetch は、Git でのチーム開発において 「リモートの状態を安全に確認する」 上で欠かせないコマンドです。
git pull との違いを理解し、fetch で最新情報を取得し、差分を確認してからマージする手順を身につけましょう。--all や --prune、さらには特定ブランチの参照指定などを活用して、効率的かつクリーンにリポジトリを保ちつつ、安全なマージプロセスを確立できます。チーム開発では、ブランチの整合性やリポジトリのクリーンアップをしっかり行うことが、スムーズなコラボレーションにつながります。git fetch を習慣化し、常に最新の状態を安全に把握することで、エラーやコンフリクトの発生を最小限に抑えて開発を進めていきましょう。