はじめに
この記事では、Gitの基本的なコマンドを整理しながら、特に混同しやすい git fetch
と git pull
の仕組みと使い分けについて、実際の開発現場でよくあるシーンを交えて解説します。
目次
Gitの基本コマンド復習
まず、開発でよく使うGitコマンドを整理しておきます。
ローカルでの作業
# 現在の状態確認
git status
# ファイルをステージング
git add
git add . # 全ての変更をステージング
# コミット
git commit -m "コミットメッセージ"
# ブランチ関連
git branch # ローカルブランチ一覧
git branch -a # リモートブランチも含めて一覧表示
git checkout # ブランチ切り替え
git checkout -b # ブランチ作成と切り替えを同時に
リモートリポジトリとの連携
# リモートリポジトリの確認
git remote -v
# リモートリポジトリにプッシュ
git push origin
# リモートの変更を取得(今回の主役!)
git fetch
git pull
リモートリポジトリとの同期について
開発環境構築や日々の開発で最も重要なのが、リモートリポジトリ(GitHub、GitLabなど)との同期です。
なぜ同期が必要なのか?
- チームメンバーが追加した新機能
- バグ修正されたコード
- 新しいライブラリの追加
- 設定ファイルの更新
これらの変更を自分のローカル環境に反映させるために、同期処理が必要になります。
git fetchの仕組みと使い方
git fetchとは?
git fetch
はリモートリポジトリの最新情報をローカルに取得するが、現在の作業ブランチには反映しないコマンドです。
git fetch origin
内部的に何が起こっているのか?
- リモートリポジトリから最新の情報をダウンロード
-
origin/main
、origin/develop
などのリモート追跡ブランチを更新 - 現在のブランチ(作業中のファイル)は変更されない
# fetch後の状態確認
git status
git log --oneline --graph --all # 全ブランチの状況を可視化
具体的な使用例
開発環境構築時の安全な同期
# 新しいプロジェクトをクローン後
git clone
cd
# 最新情報を確認してから作業開始
git fetch origin
git log --oneline origin/main # 最新のコミット履歴を確認
git checkout main
git merge origin/main # 安全にマージ
git pullの仕組みと使い方
git pullとは?
git pull
はfetch + merge を一度に実行するコマンドです。
git pull origin main
これは以下のコマンドを連続実行するのと同じです:
git fetch origin
git merge origin/main
内部的に何が起こっているのか?
- リモートリポジトリから最新情報をダウンロード(fetch)
- 自動的に現在のブランチにマージ
- コンフリクトがあれば解決を求められる
pullの種類
# 通常のpull(マージコミットが作られる)
git pull origin main
# rebaseを使ったpull(履歴が一直線になる)
git pull --rebase origin main
# fast-forwardのみ許可(安全な更新のみ)
git pull --ff-only origin main
具体的な使用例
日々の開発作業での更新
# 作業開始前の routine
git checkout main
git pull origin main
# または作業ブランチの更新
git checkout feature/new-function
git pull origin feature/new-function
実際の開発現場での使い分け
git fetchを使うべき場面
1. 初回の開発環境構築時
# 慎重に環境構築
git fetch origin
git log origin/main # 最新の状況を把握
git merge origin/main
2. 重要な本番環境での作業前
# 本番デプロイ前の確認
git fetch origin
git diff HEAD origin/main # 変更内容を必ず確認
# 問題がなければマージ
git merge origin/main
3. 長期間作業していたブランチの更新
# 長期作業後の安全な同期
git fetch origin
git log --oneline HEAD..origin/main # 何が変わったかチェック
git merge origin/main
git pullを使うべき場面
1. 日常的な開発作業
# 朝の作業開始時
git pull origin main
# 機能ブランチでの定期更新
git pull origin feature/user-auth
2. 単純な更新のみの場合
# READMEの更新など、コンフリクトが起きにくい変更
git pull origin main
3. チーム内でのルールが確立している場合
# チームでpullの運用ルールが決まっている
git pull --rebase origin main
よくあるトラブルと対処法
1. pullでコンフリクトが発生
# コンフリクト発生
git pull origin main
# Auto-merging file.txt
# CONFLICT (content): Merge conflict in file.txt
# 対処法1: コンフリクトを解決してコミット
# エディタでコンフリクト箇所を修正
git add file.txt
git commit -m "Resolve merge conflict"
# 対処法2: いったん取り消し
git merge --abort
2. fetchしたけどマージを忘れた
# fetchした変更が反映されない
git status
# Your branch is behind 'origin/main' by 3 commits
# 解決法
git merge origin/main
3. pullで意図しない変更が入った
# 直前のpullを取り消し(注意:コミット前のみ)
git reset --hard HEAD@{1}
# より安全な方法(次回から)
git fetch origin
git diff HEAD origin/main # 変更内容を確認
git merge origin/main
4. リモートブランチの情報が古い
# 削除されたリモートブランチが残っている
git remote prune origin
# すべてのリモート情報を更新
git fetch --all --prune
まとめ
fetch vs pull の使い分けガイドライン
場面 | おすすめコマンド | 理由 |
---|---|---|
開発環境構築 |
git fetch → 確認 → git merge
|
慎重な確認が必要 |
日常の開発作業 | git pull |
効率的 |
本番環境の更新 |
git fetch → 確認 → git merge
|
安全性重視 |
長期作業後の同期 |
git fetch → 確認 → git merge
|
多くの変更があるため |
チーム開発のルーチン | チームのルールに従う | 統一性が重要 |
覚えておきたいベストプラクティス
- 不安な時は fetch を使う
- 変更内容は必ず確認する習慣をつける
- 重要な作業前はバックアップ(ブランチ作成)
- チーム内でのルールを明確にする
# 安全な作業の流れ(推奨)
git fetch origin # 最新情報取得
git log --oneline HEAD..origin/main # 変更内容確認
git diff HEAD origin/main # 詳細な差分確認
git merge origin/main # 問題なければマージ
何か質問や指摘があれば、コメントでお気軽にお聞かせください。