質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.45%
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

意見交換

クローズ

2回答

849閲覧

アップストリームブランチとリモート追跡ブランチの違いが分かりません。

sino3325

総合スコア65

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

1グッド

1クリップ

投稿2023/03/05 11:53

1

1

テーマ、知りたいこと

アップストリームブランチとリモート追跡ブランチの違いを知りたい。

背景、状況

GitHubについて学習しており、そこで以下の用語を知りました。

  • リモートブランチ
  • リモート追跡ブランチ
  • アップストリームブランチ
  • ローカルブランチ

そこでそれぞれの用語の違いを整理していたのですが、アップストリームブランチとリモート追跡ブランチの違いが私にはいくら調べてもわかりませんでした。
リモートブランチはリモートリポジトリにあるブランチで、ローカルブランチはローカル環境にあるブランチということはわかるのですが(この認識ももしかしたら間違ってるかもしれませんが...)、それ以外がわかりません。

私の現状での認識では、リモート追跡ブランチは$git fetchしたときに手に入るもので、アップストリームブランチは上流という意味からして、「リモート追跡ブランチはローカルブランチのアップストリームブランチであり、リモートブランチはリモート追跡ブランチのアップストリームブランチである」という認識なのですが合っていますでしょうか?

logres_Fan❤️を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答2

#1

arcxor

総合スコア2859

投稿2023/03/05 13:15

リモート追跡ブランチとアップストリームブランチ(=上流ブランチ)は別物です。

これらを理解するためには、「リモート追跡ブランチ」と「追跡ブランチ」と「アップストリームブランチ」の3つを知る必要があります。

上記を読めば違いが理解できるかと思います。その違いを以下に示します。


私の現状での認識では、リモート追跡ブランチは$git fetchしたときに手に入るもので、

git clone すると自動的にローカルに「リモート名/ブランチ名」の一式が作成されますが、これらがリモート追跡ブランチです。リモートにあるすべてのブランチ(の最新コミット)を指しているブランチです。リモートが更新された場合、git fetch を実行するとリモート追跡ブランチが更新されます。

アップストリームブランチは上流という意味からして、「リモート追跡ブランチはローカルブランチのアップストリームブランチであり、

少し誤解があります。確かに特に指定をしない限りは、「リモート追跡ブランチ」がローカルブランチの「アップストリームブランチ」として設定されますが、リモート追跡ブランチとアップストリームブランチが常に一致するとは限りません。

git-scm ドキュメントの「追跡ブランチ」の節の第2段落を参照してください。

あるリポジトリをクローンしたら、自動的に master ブランチを作成し、origin/master を追跡するようになります。 しかし、必要に応じてそれ以外の追跡ブランチを作成し、origin 以外にあるブランチや master 以外のブランチを追跡させることも可能です。 シンプルな方法としては、git checkout -b [branch] [remotename]/[branch] を実行します。

例えば origin リモートの master ブランチを使って開発している場合、

  • (1) ローカルのmaster ブランチ
  • (2) ローカルの origin/master ブランチ
  • (3) リモートの master ブランチ

という構成になりますが、「origin/master」のように「リモート名/ブランチ名」となっているローカルブランチ、つまり (2) のようなものは「リモート追跡ブランチ」です。

また、(2) がアップストリームブランチになることもありますが、(1) が追跡しているブランチのことをアップストリームブランチと呼びます。なお、(1) のように「アップストリームブランチを持つブランチ」のことを「追跡ブランチ(=追跡先を持っているブランチ)」と呼びます。(ややこしいですが、追跡ブランチが何を意味するかについては歴史的経緯により変更されています)

リモートブランチはリモート追跡ブランチのアップストリームブランチである」という認識なのですが合っていますでしょうか?

いいえ。そのような表現はしません。アップストリームブランチは、追跡ブランチに対して使われる表現です。つまり上記の (1)=>(2) をそれぞれ「追跡ブランチ」と「アップストリームブランチ」と呼ぶのであって、(2)=>(3) を「リモート追跡ブランチ」と「アップストリームブランチ」と呼ぶわけではありません。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

sino3325

総合スコア65

投稿2023/03/05 14:44

#1
ご回答ありがとうございます。
完全に理解することはまだできていませんが、おかげさまでけっこうスッキリしました。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問