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 という流れになります。プロジェクトの構成に合わせてリモート名を整理し、混乱を避けましょう。