ローカル、追跡、リモートブランチの理解を助けるイメージ図とその状況を確認するgitコマンドの使い方
gitを使い始めたばかりのころは、
- ローカルブランチ
- 追跡ブランチ
- リモートブランチ
の違いがなかなかイメージできないものです。
でも、その3者の関係がイメージできると、とたんに雲が晴れたようにgitが分かってくる場合もあります。
というのも、gitの概念がややこしく、複雑に感じる理由のひとつは、「自分が今どこにいて、コマンドの発行がどこに反映されるのか?」という基本的なポジションの把握で混乱していることが多いからです。
今回の記事で場所の概念がはっきりすることで、gitを自由自在に使いこなす基本を身につける一助になればと思います。
どこがリモートとして認識されているかを確認するコマンド
たいていの場合は、ローカルブランチが、自分がソースを編集したりするところですよね。
たとえば、ローカルのブランチで「Branch1」を編集しているとすると、それの元になっている、リモートのブランチ「Branch1」が存在すると思います。
自分がどこのリモートを参照しているかを確認するには、
$ git remote -v
コマンドを使います。
すると、以下のようにoriginという名前で「file:///D:\my_remote_git_ripo\MySample.git」がリモートのリポジトリとして定義されていることが分かりますね。
この例では、file://で、同じPCの別のディレクトリを指していますが、https://xxxxxだったり、ssh://だったりすることが多いと思います。

ローカル、追跡、リモートの3種類のリポジトリにあるブランチの関係を確認するコマンド
さて、リポジトリには複数のブランチが存在することが多いでしょう。
なので、「自分の場所」を正しく把握するには、「どんなブランチがどこにあるのか?」を確認する必要があります。
そんなときに使えるコマンドが、
$ git branch -vv
です。このコマンドで、「ローカルリポジトリ ⇔ 追跡リポジトリ」のブランチ同士の関係が分かります。
また、
$ git branch -va
をたたくと、「ローカルリポジトリ」と「リモートリポジトリ」にどんなブランチがあるのかを確認できます。

上記のコマンドの実行結果をじっくり見てみましょう。
下のような図がイメージできますか?
この図、結構重要です。
これがイメージできるようになると、gitの扱いが格段に楽になるので、がんばってくださいね!

追跡ブランチとは何か?
上の図画イメージできるようになると、「追跡ブランチ」というものの実態が見えてきます。
大雑把に言うと、
「追跡ブランチ」とは、originによって定義されたリモートにある同名のブランチに紐ついているローカルにあるブランチで、proxyのように振舞う
と言うことができます。
つまり、上の図で言うと、ローカルのブランチ「Branch1」は、追跡ブランチ「origin/Branch1」を経由して、リモートの「Branch1」からfetchしたり、pushしたりすると言うことです。
正確に言うと、ローカルのブランチ「Branch1」から追跡ブランチ「origin/Branch1」にpushすると、後は自動でリモートの「Branch1」にも反映されると言うことになります。
このように振舞うため、「追跡ブランチ」と呼ばれるわけです。
ローカルのブランチから見えているのは、追跡ブランチだけで、その先は追跡ブランチがそれに紐ついているリモートのブランチによろしくやってくれるというわけですね。
これが分かると、少し複雑なブランチの関係でも容易に理解できるようになります。
$ git branch -u origin/Branch3
のようなコマンドで、ローカルブランチに紐づいている追跡ブランチを変更することができます。
つまり、上記のコマンドは、「Branch1」に対する追跡ブランチを「origin/Branch3」に付け替えていることになります。

その結果上記のような関係になり、git branch -vv の確認結果も変わったことが分かります。
以上が、リモート、追跡、リモートブランチの関係性の把握の方法と、イメージになります。