【Gitをしっかり理解】追跡ブランチとリモートブランチは別物!

Not image

「ローカルブランチとリモートブランチはなんとなく分かるけど、追跡ブランチって分かりにくい」という方は結構多いと思います。

「追跡ブランチ」という名前が良くないのか、イメージしづらい。「『追跡、追跡』って一体何を追跡しているんだ?」というのが、疑問のポイントだと思います。

この「追跡ブランチ」というポイントが掴めれば、Gitの理解がとても進みます。

私も追跡ブランチが理解できたことで、Gitの理解が進み自分がやっているコマンド操作を具体的にイメージできるようになりました。

これだけ重要なことですが、「追跡ブランチ」に焦点を置かれて書かれた記事や書籍があまりありませんでした。

そこで今回は、現在Gitを勉強中の方に向けてローカルブランチ・追跡ブランチ・リモートブランチについて整理していこうと思います。

Gitのブランチの種類

ローカルブランチとは?

ローカルブラントとは、ローカルリポジトリにあるブランチのことです。

git branchコマンドをオプションなしで実行した時に表示されるもので、一番最初は「master」という名前のローカルブランチしかないです。

また、git checkout -b sampleのようなコマンドを実行すると、自分が作成した「sample」というローカルブランチに移動することもできます。

追跡ブランチとは?

今回の記事の根幹とも言える、「追跡ブランチ」とは一体なんなのか?

追跡ブランチというのは、別名「リモートトラッキングブランチ」とも呼ばれています。

この言葉の方が、トラッキング(追跡)している対象は、リモートブランチであるとイメージしやすいと思います。

そう、追跡ブランチはリモートブランチではありません。

具体的に言うと、git branch -aというコマンドを打った時に「remotes/origin/master」というブランチ名が表示されます。

このブランチは一見リモートブランチだと勘違いしてしまいますが、実は追跡ブランチの名前なのです。(ここでは、最もポピュラーなリモートリポジトリ名の「origin」を使っています。)

ネット上の記事の中には、git branch -aを実行すると、ローカルブランチとリモートブランチの名前が表示されるという間違った情報があります。

しかし、間違えないように。

git branch -aコマンドは、ローカルブランチと追跡ブランチ(リモートトラッキングブランチ)を表示するコマンドです。

とても重要なので、2回言いました。

またこれも重要なことですが、追跡ブランチはローカルリポジトリにあるブランチです。

ここもしっかり押さえるべきポイントです。

ある意味では、追跡ブランチもローカルブランチの仲間であると言えるかもしれません。

リモートブランチとは?

リモートブランチとはリモートリポジトリにあるブランチです。

リモートブランチだけは、自分のローカルPCにないブランチです。

ブランチとリポジトリの関係図

Not image

図の通り、追跡ブランチはリモートリポジトリのリモートブランチを追跡しています。

また、図では追跡ブランチ「origin/master」をローカルリポジトリの「master」が追跡していると言えます。この場合、「origin/master」ブランチはローカルの「master」ブランチの上流ブランチと言います。

ここへきて新しい言葉ですが、基本的に上流ブランチは追跡ブランチが選択されます。

「基本的に」と言ったのは、上流ブランチに他のローカルブランチが選択される場合があるからですが、基本は「上流ブランチは追跡ブランチが選択される」です。

まとめ

今回はローカルブランチと追跡ブランチとリモートブランチに分けて、それぞれ確認していきましたが、いかがだったでしょうか?

今自分が行なっているコマンド操作が、「どこのリポジトリのどのブランチ」に対して行なっている操作なのかを意識するかしないかで、Gitの理解は大きく変わると思います。

それだけ、ブランチを理解することはGitを理解する上で大事なことだと思います。

私が追跡ブランチ・リモートブランチのことを意識したのは、git fetchコマンドをする時でした。

git pullコマンドは、git fetchとgit mergeの合わせ技であると言う記事を読んだことがきっかけだったでした。

そのため、今git fetchコマンドが理解できない方でも、この記事をしっかり読んだ今ならgit fetchコマンドがスッと理解できると思います。

もしgit fetchコマンドを理解できていない方は、この機会についでに理解してしまいましょう。

【Gitをしっかり理解】pullとmergeとfetchは一体何をしているのか?

2018.10.17

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です