Shiraude Code Docs
用語2026年9月5日Gitupstream用語ブランチOSS

upstream(アップストリーム)とは

upstreamは直訳すると「上流」です。川の流れをイメージしてもらうと分かりやすくて、水が流れてくる「元」の方向が上流、流れていく先が下流(downstream)。開発の世界でも、自分がいる場所より「元」にあたる側を指すときにこの言葉を使います。

正直、最初にこの単語を見たとき「上流工程のことか?」と勘違いしたんですが、そういう意味ではありません。文脈によって指すものが少し変わるので、代表的な使い方を順に見ていきます。

使い方1: Gitでの「元のリポジトリ」

いちばんよく出てくるのがGitの文脈です。GitHubで他人のリポジトリをフォーク(自分のアカウントにコピー)して作業するとき、コピー元のリポジトリのことをupstreamと呼びます。

upstream(元のリポジトリ)
自分のフォーク(origin)
手元のクローン(ローカル)

川の例えで言えば、元のリポジトリが上流の水源で、自分のコピーはそこから水を引いてきた下流の田んぼ、というイメージです。上流で新しい変更が入ったら、それを自分の側に引き込んでくる(取り込む)必要があります。逆に、自分の田んぼで作った改良を上流に還元することを「upstreamに送る」「アップストリームする」と言ったりします。

Gitでは、リモートリポジトリに好きな名前を付けられます。慣習として、自分のフォークをorigin、フォーク元をupstreamという名前で登録することが多いです。

git remote add upstream https://github.com/例/元リポジトリ.git
git fetch upstream

使い方2: ブランチの「追跡先」

もう一つ、Gitでupstreamという言葉が出る場面があります。ローカルのブランチが「どのリモートブランチと対応しているか」という設定です。これを上流ブランチ(upstream branch)と呼びます。

新しくブランチを作って初めてpushしようとしたとき、「上流ブランチが設定されていない」といったメッセージを見たことがある人は多いはずです。あれは「このローカルブランチを、リモートのどのブランチに対応させるか決まっていませんよ」という意味。-uオプションを付けてpushすると、その対応付けが記録されます。

git push -u origin feature-branch

一度設定してしまえば、以降はgit pushgit pullとだけ打てば、Gitが「あ、このブランチの上流はあれだな」と判断してくれます。地味ですが、これがあるかないかで日々のタイプ量がかなり変わります。

使い方3: ソフトウェア本体としての「上流」

OSSの話題では、そのソフトウェアの本家開発元を指して「upstream」と言うこともあります。たとえばあるツールをカスタマイズして社内で使っているとして、そのカスタマイズを本家に取り込んでもらうことを「upstreamにマージしてもらう」と表現します。

この使い方も川の比喩そのままです。本家が水源で、それを利用している各プロジェクトが下流。上流でバグが直れば下流にも恩恵が及びますし、逆に下流で見つけた問題を上流に報告して直してもらう、という関係になります。

upstreamとdownstreamの対応

視点upstream(上流)downstream(下流)
フォークフォーク元のリポジトリフォークした自分のリポジトリ
ブランチ対応するリモートブランチ手元のローカルブランチ
OSS本家の開発プロジェクトそれを利用・改変する側

混乱しないためのコツ

「upstreamって結局どれ?」と迷ったら、今いる場所から見て、変更が生まれてくる元はどこかを考えるとだいたい当たります。自分が水を引いている側なら、水が来ている方向が上流。

もう一つ注意したいのが、upstreamという名前は「決まりきったキーワード」ではなくただの慣習だという点です。Gitのリモート名としてのupstreamは自分で好きに付けられる名前なので、チームによっては別の名前を使っていることもあります。設定を確認したいときはgit remote -vで登録されているリモートの一覧が見られます。

逆に「上流ブランチ」の方はGitの機能として組み込まれた概念で、こちらは名前ではなく設定です。この2つは同じ「upstream」という単語を使っていますが別物なので、慣れるまでは「リモートの名前の話か、ブランチの対応付けの話か」を意識して読むと混乱しにくくなります。

このページは役に立ちましたか?