skillup

技術ブログ

Git サーバー・ネットワーク

Gitのブランチについて

投稿日:

ちょっといろいろと触っているGitに関して。

前回は作業ディレクトリ、インデックス、コミットについて説明したのですが、今回はブランチについて行います。

ブランチとは?

訳すと枝になるのですが、Gitでいうと「ある履歴を管理した1つの流れ」とでもいえるでしょうか。

branchなんて全く意識しなくてもgitでadd,commitした瞬間にmasterというディフォルトのブランチができます。

そしてGitでずっと1本の履歴で開発してきたとして、実験的な機能を追加させたい場合は別の履歴をつくることになります。

こういった行為をブランチを作る、といい、上記のケースの場合、2本のブランチを作ることになります。

ブランチを作っておけば、これを切り替えることで1つのディレクトリの中で通常の開発で使うソースと様々な機能を実験的に追加したソースを混合させることができるわけです。

ブランチには三種類ある

ところがgitのbranchといっても一筋縄ではいかないんですよ。

例えばmasterだけのbranchを考えてみても実は3種類あります。

ローカルブランチ

一番わかりやすいのはローカルブランチでしょうか。

普段作業ディレクトリ、インデックス、コミットを行った場合、このコミットの記録が直接記録されているものがローカルブランチですね。

いわばローカルの普通のブランチとでもいえばいいのでしょうか。

リモートブランチ

その次のリモートブランチですが、これはリモートのリポジトリにあるブランチのことです。

リモートは当然物理的に離れたところにあるブランチですので、ローカルにコミットしただけではリモートには反映されません。

ローカルのコミットを反映させたければgit push 、逆にリモートの変更を取り込みたければgit pull(getch)が必要になってきます。

追跡ブランチ

そしてなにより、わかりにくいのがこの追跡ブランチです。

実はリモートの変更を調整する窓口(?)のようなものです。

gitではリモートの変更を取り込むときに、いきなり変更を反映させることもできますが、一時的に別の場所に変更履歴をとりこんでおき、差分をみてからとりこむ、ということもできます。

前者のいきなりとりこむのがgit pullであり、後者がgit fetchになります。

この一時的に変更を取り込んだ時に変更が反映されているのが追跡ブランチになります。

svn→gitへの移行などを行った場合には、追跡ブランチが先にでき、ここからローカルブランチを作る必要があります。

git branchの見方

例えばgit branch -aとなったときに下記のような一覧が現れます。

まずremotesがついていないものは普通のローカルブランチです。

この場合、masterがローカルブランチで※がついているのは現在参照をしているブランチという意味です。

次のremotes/origin/masterというのが追跡ブランチのことです。

ちなみにremotes/origin/HEAD→origin/masterというのは現在のHEADのbranchを指します。

参考リンク

http://www.kaeruspoon.net/articles/1078

http://qiita.com/masashi127/items/2e103c3fba9d1b058961

https://git-scm.com/book/ja/v1/Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD-%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81

http://snowlong.hatenablog.com/entry/2015/03/12/212455

-Git, サーバー・ネットワーク
-

執筆者:


comment

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

関連記事

no image

vimの設定に関して

今の開発ではほとんどeclipseを使っていますが、プログラミングをやり始めてから2年ぐらいはずっとgvim(vimのGUI版)でした。 別にこだわりがあったわけではないんですけどね。 最初にならった …

no image

MacでのVirtualHost設定

MacでのVirtualHostについて。 Contents1 設定方法2 注意点2.1 httpd -S2.2 httpd: Could not reliably determine the ser …

no image

apacheでのバーチャルホストの設定

このブログを旧サイトから移管し、同一ホストで別々のドメインを運用することになったので、バーチャルホストの設定を行いました。 Contents1 設定方法1.1 http.conf1.2 実際のバーチャ …

no image

PHPのheroku(ヘロク)へのデプロイ

有名なPaasのサービスであるherokuをちょっといじったのでその時のメモなどを。 Contents1 アカウント開設2 Heroku | Cloud Application Platform3 デ …

no image

vagrantでの静的ファイルのキャッシュがクリアされない

タイトルのまんまですが、vagrantでapacheを使ってまして、静的ファイルのキャッシュがクリアされないと言う問題が発生しました。 vagrantは結構長い間使ってましたが、今まで素のhtmlを書 …