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
は、リモートリポジトリ上の最新のコミットやブランチ情報などを ローカルにダウンロードしてくる(同期する)ためのコマンドです。ダウンロードしただけで、ローカルブランチにはまだマージされません。つまり、ローカルの履歴には影響を与えず、あくまでも「情報を取得するだけ」という点が最大の特徴です。
最も基本的な使い方は以下のようになります。
Git Bash
git fetch <リモート名> <ブランチ名>
ただし、リモート名やブランチ名を省略すると、既定のリモート(通常はorigin
)にある、あらゆるブランチを取得してくれます。
例:
Git Bash
# originリモートの全ブランチ情報を取得
git 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
として特定のブランチの最新だけを取得する。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
を習慣化し、常に最新の状態を安全に把握することで、エラーやコンフリクトの発生を最小限に抑えて開発を進めていきましょう。