🔍 git fetchの仕組み
安全 非侵襲的git fetchはリモートの変更をローカルにダウンロードするだけで、作業中のファイルには一切変更を加えません。
リモート/main
↓
git fetch
origin/main
リモートの変更は「origin/main」というリモート追跡ブランチにダウンロードされる
ローカルの作業ディレクトリや作業ブランチは一切変更されない
リモートでどんな変更があったか確認してから統合したい場合に最適
$ git fetch origin main
✅ メリット
- 安全:作業中のファイルが変更されない
- 変更の確認が可能:マージ前に差分を検証できる
- コントロール:統合タイミングを自分で決められる
⚠️ デメリット
- 2段階のプロセスが必要(fetch後にmerge)
- 手動の作業が多い
📊 実際の使用シーン
git fetchが最適な状況
複数の開発者が同じブランチに同時に変更を加えている場合
リモートの変更を確認してから統合したい場合
チームに新しいメンバーが加わった時
ローカルで未コミットの変更があり、リモートとの衝突を避けたい場合
ベストプラクティスとして、頻繁にgit fetchを実行して変更を把握し、必要な時だけgit pullを使うのが推奨されています!
📝 注意点: git fetchはリモートからの変更をダウンロードするだけで、ローカルのブランチには反映されません。変更を適用するにはgit mergeまたはgit rebaseを実行する必要があります。
🔄 git mergeの仕組み
統合git mergeは異なるブランチの変更を統合するコマンドです。fetchと組み合わせて使用することで、リモートの変更をローカルワークスペースに反映できます。
origin/main
↓
git merge
main(ローカル)
「origin/main」→「ローカルのmain」へ変更を統合
この操作によってローカルの作業ディレクトリが更新される
コンフリクト(競合)が発生する可能性があるステップ
$ git merge origin/main
📝 統合の種類: Git mergeには「fast-forward」と「non-fast-forward (3-way merge)」の2種類があります。履歴が分岐していない場合は単純に最新コミットに移動(fast-forward)、分岐している場合は新しいマージコミットが作成されます。
⚡ git pullの仕組み
一括処理 便利git pullはgit fetchとgit mergeを一度に実行するショートカットコマンドです。
git pull = git fetch + git merge
リモート/main
↓
git pull
main(ローカル)
リモートからの変更を取得し、ローカルブランチに直接統合
1ステップでリモートとローカルを同期できる簡単な方法
コンフリクトが発生した場合はその場で解決する必要がある
$ git pull origin main
✅ メリット
- 簡単:1コマンドで同期が完了
- 時間の節約:取得と統合を別々に行う必要がない
- シンプル:特に小規模プロジェクトで効率的
⚠️ デメリット
- コンフリクトのリスクが高い
- 変更の確認なしに統合される
- 予期しない結果を招く可能性
🔀 コマンド比較
| 機能 | git fetch | git merge | git pull |
|---|---|---|---|
| リモートからダウンロード | ✅ | ❌ | ✅ |
| ローカルブランチに統合 | ❌ | ✅ | ✅ |
| 作業ディレクトリの変更 | ❌ | ✅ | ✅ |
| 変更の確認が可能 | ✅ | - | ❌ |
| コンフリクトリスク | 低 | 高 | 高 |
| 使用頻度の推奨 | 頻繁に | 必要時 | 少なめに |
最新のGitベストプラクティスでは「頻繁にフェッチ、必要な時だけプル」というアプローチが推奨されています!
🧰 高度な使い方
git pull --rebase
git pullには--rebaseオプションがあり、マージの代わりにリベースを使用できます。これにより、コミット履歴がより線形で読みやすくなります。
$ git pull --rebase origin main
変更の確認方法
fetchした後、変更を確認するには:
$ git fetch origin main
$ git diff main origin/main
fetch後の統合
fetchした後に変更を統合するには:
$ git fetch origin main
$ git merge origin/main
# または
$ git rebase origin/main
🌟 2025年のベストプラクティス: GitHubやGitLabなどの大手テック企業では、公開ブランチに対してはgit mergeを使用し、個人の作業ブランチにはgit rebaseを使用するというハイブリッドアプローチが主流になっています。