【Git】origin と upstream の違いと使い分け方

Git を使っていると「origin」と「upstream」という名前をよく目にします。どちらもリモートリポジトリを指しますが、役割や使い方が異なるため混乱しがちです。ここでは origin と upstream の違い、実際の開発フローでの使い分け方を解説します。

origin とは?

origin は、自分がクローンしてきたリモートリポジトリのデフォルト名です。通常は自分の作業用リポジトリ(例:自分の GitHub アカウントに fork したリポジトリ)を指します。

# クローン時に自動で origin が設定される
git clone git@github.com:yourname/project.git
cd project
git remote -v
# 出力例
origin  git@github.com:yourname/project.git (fetch)
origin  git@github.com:yourname/project.git (push)

upstream とは?

upstream は、fork 元など「プロジェクトの本家リポジトリ」を指すのに使われる名前です。クローン直後は設定されていないため、自分で追加します。

# 本家リポジトリを upstream として追加
git remote add upstream git@github.com:original/project.git
git remote -v
# 出力例
origin    git@github.com:yourname/project.git (fetch)
origin    git@github.com:yourname/project.git (push)
upstream  git@github.com:original/project.git (fetch)
upstream  git@github.com:original/project.git (push)

使い分けの基本

  • origin … 自分が直接 push できるリモート(自分の fork)
  • upstream … 本家リポジトリ。通常は read-only で、pull request の宛先になる

1. 本家の更新を取り込む

# 本家の main ブランチを取得
git fetch upstream

# 自分の main にマージ
git checkout main
git merge upstream/main

2. 自分の fork に反映する

git push origin main

こうすることで、自分の fork を最新状態に保ちつつ、本家に pull request を送る準備が整います。

よくある混乱ポイント

  • 「upstream」が必ず必要なわけではない(fork せず直接 clone して作業する場合は origin のみで十分)
  • 「upstream」と「origin」は単なるリモート名なので、別名をつけても動作する。ただし慣習的に「origin」「upstream」とするのが一般的
  • push 先は通常 origin、pull 先は upstream というのが fork ベース開発の標準フロー

まとめ

origin は自分のリモートリポジトリ、upstream は本家リポジトリを指すのが慣習です。fork を前提にした開発では、origin に push → upstream に pull request という流れになります。プロジェクトの構成に合わせてリモート名を整理し、混乱を避けましょう。