Stage 3・上級編 ー Lesson 3-4
git fetch と origin/main を使いこなす — リモート操作の深掘り
fetch で取得だけしてから差分確認、push -d でリモートブランチ削除など、踏み込んだリモート操作
💡 たとえるなら
ポストから玄関に取り出すだけ(fetch)と、開けて部屋に取り込む(pull)の使い分け
Stage 1-6 では push と pull を学びました。実務ではもう一歩踏み込んで、「取り込む前に中身を確認したい」「リモートブランチを掃除したい」「複数ブランチで作業しているリモートと差分を見たい」 という場面が出てきます。
fetch と pull の違い
ここを押さえるのが今レッスンの本丸。
| コマンド | 何をする? |
|---|---|
git fetch | リモートの最新を ダウンロードだけ。ローカルの作業ブランチには影響なし |
git pull | fetch + 自分のブランチに マージ する(2段階を一度に) |
fetch だけなら ローカルのファイルは1ミリも変わりません。「中間地点」に最新を置いてくれるだけ。
fetch して、確認してから merge
「pull すると衝突するかも… 取り込む前に何が来てるか見たい」というときの定番の流れ:
fetch → 確認 → merge の3ステップ。慣れてきたら pull で済ませますが、不安なときの保険になります。
origin/main って何?
fetch で降ろしてきた 「リモートの状態を覚えておくローカルの目印」 が origin/main。実体はローカルにあるけど、リモートの最新を映す鏡のようなものです。
origin/<branch名> を使うと「リモートのあのブランチ」を指せます。
diff の応用パターン
Stage 1-5 で基本の git diff を学びました。リモート絡みでよく使うパターン:
HEAD^ HEAD~3 origin/main feature などはどれも 「コミットを指す表現」 で、diff の引数に自由に並べられます。
リモートブランチを削除する
「リモートで作ってもう要らなくなったブランチ」を消す:
-d = --delete。ローカル のブランチを消す git branch -d とセットで使います。
「マージ済みのリモートブランチを一掃したい」場合は、リモート側の管理画面(GitHubなら「Branches」)からまとめて削除するのも手。
古い origin/* キャッシュを掃除する
ローカルには「もう存在しないリモートブランチ」の名残(origin/old-feature など)が残ることがあります。
git fetch -p でも同じ。リモート側で削除されたブランチの「亡霊」を整理してくれます。
リモート一覧と URL 確認
OSSをforkして開発するときは、自分のforkを origin、本家を upstream とする2つのリモート構成がよく使われます。
コマンド早見表
| 用途 | コマンド |
|---|---|
| 取得だけ(マージしない) | git fetch origin |
| リモートと差分確認 | git diff main origin/main |
| 来てるコミット一覧 | git log main..origin/main --oneline |
| リモートブランチ削除 | git push origin -d <branch> |
| 古いリモート参照を整理 | git fetch --prune |
| リモート一覧 | git remote -v |
| URL変更 | git remote set-url origin <url> |
| リモート追加 | git remote add <name> <url> |
やってみよう:ローカルだけで「他人の更新」を再現する
リモートが無くてもこの流れは練習できます。ローカルに 「ベアリポジトリ」 を1つ作って、それを擬似リモートにします。
これで fetch → 確認 → merge の流れを ネットなしで体験 できます。練習が終わったら cd .. && rm -rf fake-remote.git other-clone で掃除。
このレッスンのまとめ
fetch と pull の違いがわかったorigin/main 表記でリモート状態を指せるdiff や log で確認するワークフローを覚えたpush -d でリモートブランチを削除できるfetch --prune で古いリモート参照を整理できる✏️ 理解度チェック
各問題、選んだ瞬間に正解と解説が表示されます。気軽に試してください。
- Q1. git fetch と git pull の違いは?
- Q2. ローカルにある「リモート追跡ブランチ」の典型的な名前は?
- Q3. リモートのブランチ feature を削除するコマンドは?