Q&A
テーマ、知りたいこと
アップストリームブランチとリモート追跡ブランチの違いを知りたい。
背景、状況
GitHubについて学習しており、そこで以下の用語を知りました。
- リモートブランチ
- リモート追跡ブランチ
- アップストリームブランチ
- ローカルブランチ
そこでそれぞれの用語の違いを整理していたのですが、アップストリームブランチとリモート追跡ブランチの違いが私にはいくら調べてもわかりませんでした。
リモートブランチはリモートリポジトリにあるブランチで、ローカルブランチはローカル環境にあるブランチということはわかるのですが(この認識ももしかしたら間違ってるかもしれませんが...)、それ以外がわかりません。
私の現状での認識では、リモート追跡ブランチは$git fetchしたときに手に入るもので、アップストリームブランチは上流という意味からして、「リモート追跡ブランチはローカルブランチのアップストリームブランチであり、リモートブランチはリモート追跡ブランチのアップストリームブランチである」という認識なのですが合っていますでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
回答2件
#1
総合スコア2457
投稿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
総合スコア2457
投稿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) を「リモート追跡ブランチ」と「アップストリームブランチ」と呼ぶわけではありません。
ご回答ありがとうございます。
完全に理解することはまだできていませんが、おかげさまでけっこうスッキリしました。
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
関連した質問
Q&A
解決済
Sourcetreeのプッシュ時にブランチが表示されない状態を解消したい
回答2
クリップ2
更新
2019/10/16
Q&A
解決済
ソケットエラー10054 「既存の接続はリモート ホストに強制的に切断されました。」
回答1
クリップ1
更新
2015/12/21
Q&A
解決済
Windows10からFTPにつながらない
回答2
クリップ0
更新
2021/08/11
意見交換
受付中
Git オープンソースを改変するプロジェクトの使い方について
回答2
クリップ0
更新
2023/05/31
Q&A
受付中
WPをGitで管理するにはディレクトリはどこを指定したらよいでしょうか?
回答2
クリップ0
更新
2023/04/13
Q&A
解決済
【Rails】nil can't be coerced into Integerの空欄エラーを、エラーが出ないでバリデーションかけられるようにしたい
回答1
クリップ0
更新
2023/05/04
Q&A
解決済
【Git】ローカルのmainブランチのコミットログがpullする度に汚れてしまう対応について
回答3
クリップ2
更新
2023/04/05
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。