Stage 3・上級編 ー Lesson 3-4

git fetch と origin/main を使いこなす — リモート操作の深掘り

fetch で取得だけしてから差分確認、push -d でリモートブランチ削除など、踏み込んだリモート操作

💡 たとえるなら

ポストから玄関に取り出すだけ(fetch)と、開けて部屋に取り込む(pull)の使い分け

Stage 1-6 では pushpull を学びました。実務ではもう一歩踏み込んで、「取り込む前に中身を確認したい」「リモートブランチを掃除したい」「複数ブランチで作業しているリモートと差分を見たい」 という場面が出てきます。

fetch と pull の違い

ここを押さえるのが今レッスンの本丸。

コマンド何をする?
git fetchリモートの最新を ダウンロードだけ。ローカルの作業ブランチには影響なし
git pullfetch + 自分のブランチに マージ する(2段階を一度に)
作業ブランチ main merge でここまで来る ローカルのキャッシュ origin/main(ローカル側) fetch でここまで降ろす リモート 最新コミット origin/main fetch merge pull = fetch + merge を一発でやってくれる

fetch だけなら ローカルのファイルは1ミリも変わりません。「中間地点」に最新を置いてくれるだけ。

fetch して、確認してから merge

「pull すると衝突するかも… 取り込む前に何が来てるか見たい」というときの定番の流れ:

# ① リモートの最新を取得(ローカルの main は触らない)
$ git fetch origin
# ② リモートと自分の差分を見る
$ git diff main origin/main
# ③ どんなコミットが来てる?
$ git log main..origin/main --oneline
# ④ 問題なさそうなら merge(または rebase)
$ git merge origin/main

fetch → 確認 → merge の3ステップ。慣れてきたら pull で済ませますが、不安なときの保険になります。

origin/main って何?

fetch で降ろしてきた 「リモートの状態を覚えておくローカルの目印」origin/main。実体はローカルにあるけど、リモートの最新を映す鏡のようなものです。

# origin/main の最新コミットを見る
$ git log origin/main -1 --oneline
# origin/main 時点のファイル中身を見る
$ git show origin/main:memo.txt

origin/<branch名> を使うと「リモートのあのブランチ」を指せます。

diff の応用パターン

Stage 1-5 で基本の git diff を学びました。リモート絡みでよく使うパターン:

# 自分のローカル変更とリモートの差分
$ git diff origin/main
# 直前のコミットとその前を比較(HEAD^ = 1個前)
$ git diff HEAD^ HEAD
# 仮置き場(add 済み)とリポジトリの差分
$ git diff --staged
# どのファイルが変わったかだけ知りたい
$ git diff --name-only
# ブランチ間の差分
$ git diff main..feature

HEAD^ HEAD~3 origin/main feature などはどれも 「コミットを指す表現」 で、diff の引数に自由に並べられます。

リモートブランチを削除する

「リモートで作ってもう要らなくなったブランチ」を消す:

$ git push origin -d feature-old
 - [deleted] feature-old

-d = --deleteローカル のブランチを消す git branch -d とセットで使います。

「マージ済みのリモートブランチを一掃したい」場合は、リモート側の管理画面(GitHubなら「Branches」)からまとめて削除するのも手。

古い origin/* キャッシュを掃除する

ローカルには「もう存在しないリモートブランチ」の名残(origin/old-feature など)が残ることがあります。

# もう存在しないリモート参照を整理
$ git fetch --prune
 x [deleted] (none) -> origin/old-feature

git fetch -p でも同じ。リモート側で削除されたブランチの「亡霊」を整理してくれます。

リモート一覧と URL 確認

$ git remote -v
origin https://example.com/me/my_project.git (fetch)
origin https://example.com/me/my_project.git (push)
# URLを変える(HTTPS→SSHに移行など)
$ git remote set-url origin git@example.com:me/my_project.git
# 別のリモートを追加
$ git remote add upstream https://example.com/orig/my_project.git

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つ作って、それを擬似リモートにします。

# my_project の隣に擬似リモートを作る(一度きり)
$ cd ..
$ git clone --bare my_project fake-remote.git
$ cd my_project
$ git remote add origin ../fake-remote.git
$ git push -u origin main
# ① 「他人」が擬似リモートに変更を追加する(別フォルダで擬似的に)
$ cd .. && git clone fake-remote.git other-clone && cd other-clone
$ echo "他人の追記" >> memo.txt
$ git commit -am "他人がmemoを追記" && git push
# ② 自分のリポジトリに戻って fetch だけ
$ cd ../my_project
$ git fetch origin
From ../fake-remote
  a1b2c3d..e4f5g6h main -> origin/main
# ③ 取り込む前に何が来てるか見る
$ git log main..origin/main --oneline
e4f5g6h 他人がmemoを追記
$ git diff main origin/main
+他人の追記
# ④ 問題なさそうなので merge(pull と同等)
$ git merge origin/main

これで fetch → 確認 → merge の流れを ネットなしで体験 できます。練習が終わったら cd .. && rm -rf fake-remote.git other-clone で掃除。

このレッスンのまとめ

できるようになったこと
fetchpull の違いがわかった
origin/main 表記でリモート状態を指せる
✅ 取り込む前に difflog で確認するワークフローを覚えた
push -d でリモートブランチを削除できる
fetch --prune で古いリモート参照を整理できる

✏️ 理解度チェック

0 / 3 正解

各問題、選んだ瞬間に正解と解説が表示されます。気軽に試してください。

  1. Q1. git fetch と git pull の違いは?
  2. Q2. ローカルにある「リモート追跡ブランチ」の典型的な名前は?
  3. Q3. リモートのブランチ feature を削除するコマンドは?

© 2026 git-ready-easy — プログラミング未経験でもわかる git 入門