Git Fetch と Pull の違い

git fetch と git pull の違いを理解し、それぞれのコマンドの使い分けを解説。pull が fetch と merge を組み合わせた動作であることも説明します。

git fetch origin && git merge origin/main

詳細な説明

何が違うのか?

両方のコマンドはリモートからデータをダウンロードしますが、動作が異なります:

  • git fetch は新しいコミット、ブランチ、タグをリモートからダウンロードしますが、作業ディレクトリや現在のブランチは変更しません
  • git pullgit fetch に続いて git merge(または設定によっては git rebase)を行う省略形です。

Git Fetch

# origin から更新をダウンロード
git fetch origin

# 何が変わったか確認する
git log HEAD..origin/main --oneline

# 準備ができたら merge する
git merge origin/main

fetch は安全な選択肢です。取り込む前に受信した変更を確認できます。

Git Pull

# fetch と merge を一度に実行
git pull origin main

# merge の代わりに rebase で取り込む
git pull --rebase origin main

pull は便利ですが、予期しないタイミングでマージコンフリクトが発生することがあります。

使い分け

シナリオ コマンド
merge 前に変更を確認したい git fetch
個人ブランチの素早い更新 git pull
履歴を直線的に保ちたい git pull --rebase
CI/CD スクリプト git fetch + 明示的な merge

デフォルトの pull 動作を設定する

# pull 時に常に rebase する(マージコミットなし)
git config --global pull.rebase true

# pull がマージコミットを作成する場合に警告する
git config --global pull.ff only

ベストプラクティス

チームワークフローでは、git fetch の後に明示的な merge または rebase を行うことを推奨します。この2ステップのアプローチにより、受信した変更をレビューし、計画的にコンフリクトを解決できます。自分だけが作業しているブランチでコンフリクトの可能性が低い場合は、利便性のために git pull を使いましょう。

ユースケース

開発者が朝一番に git fetch を実行してチームメイトが夜間に push した内容を確認し、変更をレビューしてから準備ができた時点で merge する場面で使用します。

Try It — Git Command Builder

フルツールを開く