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

HTTPヘッダ・インジェクション+オープンリダイレクタ

Contents1 HTTPヘッダ・インジェクションとは?1.1 被害(ほぼクロスサイト・スクリプティング攻撃による脅威と同じ脅威)1.2 対策2 オープンリダイレクタとは?2.1 対策 HTTPヘッ …

no image

cakePHPでのサブディレクトリ(apache)

apache使用時、cakePHP2系をサブディレクトリで使いたいときの運用法に関して。通所通りですとファイルにアクセスできないので、URLのリライトをうまくしないといけません。下記に設定例をかきます …

no image

pythonのアップグレードに関して

pythonのアップグレードに関して。 python2.6だとpipがインストールされていないのですが、入れようとしてハマったのでメモ。 一般的なインストール方法ですが、下記のようになります。 [cr …

no image

gitのfetchに関して

gitでリモートの変更を取り込む場合、大きく分けるとfetchとpullがあります。 両者の違いですが、 fetch=一度、変更を取り込んで、ローカルの変更と相違点を確認できます。確認後mergeを行 …

no image

vagrantで仮想環境を別PCにコピー

vagrantで自分の作った環境を他人にコピーしたい機会があり、なんとか成功したのでメモします。いや~便利ですね・・・ 環境は vagrant 1.7.4 win8 です。 Contents1 準備2 …