私はその文の作者ではないので、確信が持てません。著者が説明している混乱は、「追跡」ブランチと「リモート追跡」ブランチの間の一般的な混乱であると考えてみましょう。gitguysにはこれに関する素晴らしい記事がありますので、実際に読んでください。彼らは素敵な写真とすべてを持っています。
これが私の見解です...
設定
例として、github に非常に単純な git リポジトリがありmaster
、いくつかのコミット (C1 と C2、C2 が現在のコミット) を持つ単一のブランチがあるとします。そのリポジトリをクローンすると...
git clone git@github.com:example/repo.git
...次の 2 つのことが起こります。
- すべてのコミット (C1 と C2) をローカル コンピューターにコピーします。
- また、ローカル コンピュータに という新しいブランチを作成します
master
。このブランチは「追跡ブランチ」であり、その HEAD は C2 にあります。このブランチは「追跡ブランチ」と呼ばれます。
新しいコミット
これまでのところ、特別なことは何もありません。しかし、これらの説明を読んでいる間に、誰かが別のコミット (C3) をコミットし、それをリモート リポジトリにプッシュしました。この新しい素晴らしいコミットについて聞いて、自分でそれを取得しようと決心したとします。
git fetch
これにより、次の 2 つのことが行われます。
- 必要な新しいコミット (C3) をローカル コンピューターにコピーします。
master
何らかの方法でローカル システムを更新して、Origin のブランチが現在 C3 にあることを知らせます。
master
しかし、ここで問題があります。ローカル システムは、オリジンのブランチが C3 にあることをどのように認識しているのでしょうか。確かにgitにはその情報をローカルに保存する方法がありますか? しかしここで?master
マージする必要があるローカル ブランチに独自のコミットやその他の変更がある可能性があるため、実際にはローカル ブランチに変更を加えることはできません。他の不明なブロブに保存されているだけですか?
答え
結局のところ、git は3 番目のブランチを使用しているだけです。現在、次の 2 つのブランチについてわかっています。
- github に物理的に配置されているブランチ。
- あなたのコンピュータ上にある「追跡ブランチ」(いわゆる
master
)。
3番目があることがわかりました。おそらく以前に見たことがあるでしょう。それは と呼ばれていorigin/master
ます。そして、これら 2 つのブランチのいずれとも同じではありません。これは、「リモート追跡ブランチ」として知られているものです。
master
これは、ローカルブランチとオリジンのブランチの間にあるブランチと考えることができますmaster
。これは、コンピューター上の実際の git ブランチ (のようにmaster
) であり、他のブランチ間をジャンプする方法と同じように操作できます。ただし、制限があります。
たとえば、あなたはそれをチェックアウトすることができます...
git checkout origin/master
ただし、おかしなメッセージが表示されます...
Note: checking out 'origin/master'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at 12dbe6a... My awesome commit!
このメッセージが表示されるのは、「リモート追跡ブランチ」が読み取り専用であるためです。ユーザーは、できるようにそれらを操作することはできませんmaster
。変更を加えることができるのは git システム自体だけです (これはフェッチ中に行われます)。そのため、実装の観点からは、それらを他のブランチと考えることができます。ただし、読み取り専用であるため、通常、他のブランチのように使用することはありません。
つまり、実際には、3 つのブランチが混在しています。
- github に物理的に配置されているブランチ。
- マシン上に物理的に配置された
origin/master
ブランチ (「リモート トラッキング ブランチ」)。
- マシン上に物理的に配置された
master
ブランチ (「追跡ブランチ」)。
質問に答えるには...
したがって、私の推測では、「追跡」ブランチと「リモート追跡」ブランチの間に実際に混乱が生じる可能性があります。誰かがmaster
「リモート追跡ブランチ」と混同するのは理にかなっていますが (結局、origin/master
! からコミットを取得します)、実際にはそうではありません。それは「追跡ブランチ」であり、追跡するブランチは ですorigin/master
。origin/master
「リモート追跡ブランチ」です。
誰かが git branch --track に関して「追跡」について話すとき、彼らはあなたが変更できる「追跡」ブランチについて話しています。
誰かが「リモート追跡ブランチ」について話すとき、彼らはリモートのブランチを追跡する読み取り専用ブランチについて話しています。