多くの場合、git fetchを明示的に実行する必要はありません。git pullを使えば、リモートの変更を取得してマージまで一度に完了できます。
git pullを使う
リモートの変更を取得してローカルに反映するには、git pullを使います。
bash
git pull
git pullは内部的に以下の2つのコマンドを実行します:
git fetch- リモートの変更を取得git merge- 取得した変更をローカルブランチにマージ
特定のブランチをpull
現在のブランチ以外のブランチをpullする場合:
bash
git pull origin main
rebaseしながらpull
マージコミットを作らずに、リベースしながらpullする場合:
bash
git pull --rebase
または設定で常にrebaseを使うようにする:
bash
git config --global pull.rebase true
git fetchが必要なケース
以下の場合はgit fetchを単独で使う必要があります:
1. リモートの状態を確認したいが、マージはしたくない
bash
git fetch
git log HEAD..origin/main # リモートとローカルの差分を確認
2. 複数のリモートブランチを一度に取得
bash
git fetch --all
3. 削除されたリモートブランチの情報を更新
bash
git fetch --prune
なぜgit pullの方が効率的か
1. ステップが少ない
git fetchを使うワークフロー:
bash
git fetch # ステップ1: リモートの変更を取得
git log HEAD..origin/main # ステップ2: 差分確認(任意)
git merge origin/main # ステップ3: マージ
git pullを使うワークフロー:
bash
git pull # 取得とマージを一度に実行
2. タイプ量が少ない
日常的な作業では、リモートの変更を取得したらすぐにマージすることがほとんどです。その場合、git pull一回で完結します。
3. マージ忘れを防ぐ
git fetchの後、マージを忘れてそのまま作業を続けてしまうミスを防げます。
4. 初心者にとってシンプル
Gitを学び始めた人にとって、fetchとpullの違いを理解するのは難しいです。基本的にはgit pullを使い、必要な場合のみgit fetchを使うという方針の方が分かりやすいです。
git fetchを使うべきでない理由
1. 中途半端な状態を作りやすい
git fetchを実行すると、リモートの情報は更新されますが、ローカルブランチには反映されません。この「リモートは取得済みだがローカルは古い」という中途半端な状態が、混乱を招くことがあります。
2. 操作の手間が増える
ほとんどの場合、fetchの後にはmergeやrebaseを実行します。最初からgit pullを使えば、この手間を省けます。
3. コンフリクト解決が遅れる
git fetchだけでは、リモートとの差分は分かっても、実際のコンフリクトは検出されません。早めにgit pullでマージすることで、コンフリクトを早期に発見できます。