エンジニアであれば、必ず使うことになる「Git(ギット)」。
プログラミング初心者にとって、Gitの仕組みを完璧に理解することは、少しハードルが高いかもしれません。
なぜなら、Gitは実際に手を動かしながら経験していかなければ、なかなか身につかないスキルだからです。
ただ、前提知識もなく闇雲に手を動かしているだけでは、決して覚えられません。
まずはこの記事を読んで、Gitの仕組みを何となくイメージできるようになるところから始めてみましょう。
もくじ
Gitとは
Git(ギット)とは、「分散型バージョン管理システム」とよばれるツールです。
Gitを使うことで、ソースコードに対しておこなった変更を複数人で共有し、効率よく開発を進めることができるようになります。
ちなみに、「分散型」ではないバージョン管理システムには、以下のようなものがあります。
- Subversion(サブバージョン)
- CVS(コンカレント・バージョンズ・システム)
しかし、これらのバージョン管理システムは古く、多くの企業はGitに乗り換えているのが現状です。
分散型バージョン管理システムとは
分散型バージョン管理システムとは、名前だけ見ると難しく感じるかもしれませんが、分けて考えると簡単です。
- 「分散型バージョン管理システム」…分散されたバージョン管理システム
- 「バージョン管理システム」…ファイルのバージョンを管理するシステム
- 「バージョン」…ファイルの変更履歴
- 「ファイル」…ソースコードや画像ファイルなど
つまり、ソースコードや画像ファイルの変更履歴を管理するシステムであり、このシステムは分散して(複数に分けて)利用するってことです。
バージョン管理システムの特徴
そもそも、なぜファイルのバージョン(変更履歴)を管理するのでしょうか?
バージョン管理システムには、以下のような特徴があります。
- ファイルに対しての変更履歴を残せる
- 変更履歴を共有できる
- 以前のバージョンに簡単に戻せる
ファイルの変更履歴を残すことで、いつ誰がどのような変更をしたのか確認することができます。
そして、これらの履歴は他のメンバーにも共有することができます。
また、ファイルに何か問題が見つかっても、前の状態(特定のバージョン)に簡単に戻せるのでとっても便利です。
バージョン管理をしていなければ、最新ファイルしか残っていないことになるので、間違った内容で書き換えてしまうと大変ですよね。
複数人で開発するときは、このような履歴(ログ)を残すやり方が主流になっているのです。
Gitの仕組み(初心者向け)
Gitの仕組みについては、以下の用語を順番に覚えていくことで、簡単に理解できます。
- リポジトリ
- リビジョン
- ブランチ
- コミット
- インデックス(ステージングエリア)
- ワーキングディレクトリ
- ローカルリポジトリとリモートリポジトリ
- プッシュ
- プル
リポジトリとは
まず、Gitには「リポジトリ」というものが存在します。
リポジトリとは、ファイルの変更履歴をためておく「貯蔵庫」のようなもので、いくつでも作ることができます。
このリポジトリの正体は、「.git」という名前のただのディレクトリです。
「.git」ディレクトリの中に、リポジトリの情報がすべて詰まっています。
リビジョンとは
リポジトリに溜めていく変更履歴のことを「リビジョン」といいます。「コミットログ」ともいいますね。
リビジョンとは、以下の情報をまとめて持っているものです。
- リビジョン番号
- コミットしたユーザー名とメールアドレス
- コミットした日時
- コミットメッセージ
- 対象ファイルの変更情報
リビジョンは、これらの情報をログ(履歴)としてリポジトリに残していきます。
コミットについては、あとで詳しく説明します。
ブランチとは
実は、リポジトリの中に直接リビジョンを溜め込んでいるわけではありません。
リビジョンは、リポジトリが持っている「ブランチ」に紐づけて管理されています。
リポジトリを作ったばかりの状態だと、「master」ブランチがデフォルトで指定されているはずです。
もちろん、ブランチ名を変えたり、新しいブランチを自由に追加することができます。
この「ブランチ」を切り替えることで、リビジョンも一緒に切り替わる仕組みになっています。
コミットとは
リポジトリにリビジョンを作成するためには、「コミット(commit)」をする必要があります。
コミットとは、ファイルの追加や修正、削除などの情報を「コミットメッセージ」とともにリポジトリに送ることです。
コミットメッセージは、ファイルの変更点などをメモとして残すために記述します。ちなみに必須です。
メッセージは他の人も読む可能性があるので、わかりやすく簡潔に記述するようにします。
インデックス(ステージングエリア)とは
インデックスとは、コミット(commit)の対象となるファイルを置いておく場所です。「ステージングエリア」ともよばれます。
このインデックスに登録するには「アド(add)」を実行します。
つまり、インデックスに「アド(add)」されたファイルしか「コミット(commit)」はできないということです。
ワーキングディレクトリとは
ワーキングディレクトリとは、リポジトリ(.git)が存在するディレクトリのことです。「ワーキングツリー」や「作業ディレクトリ」などとも呼ばれます。
ワーキングディレクトリは、「.git」があること以外は普段利用しているディレクトリと、見た目はほとんど変わりません。
「.git」のあるディレクトリ以下が、「ワーキングディレクトリ」として扱われることが大きな特徴です。
ワーキングディレクトリにあるディレクトリやファイルは、インデックスにアド(add)したり、リポジトリにコミット(commit)したりできるようになります。
また、リポジトリで管理されている情報とワーキングディレクトリの情報は、常に比較されるようになり、ディレクトリやファイルごとの差分を確認することもできます。
ローカルリポジトリとリモートリポジトリ
リポジトリには、2つの種類があります。
- 「ローカルリポジトリ」…ローカル環境にあるリポジトリ
- 「リモートリポジトリ」…リモート環境にあるリポジトリ
どちらも同じリポジトリなのですが、大きく違う点があります。
それは、リポジトリが「存在する目的」と「存在する場所」です。
ローカルリポジトリは、自分のパソコンなどでバージョン管理するため、ローカル環境にリポジトリが存在します。
リモートリポジトリは、複数人が持つローカルリポジトリの内容を共有できるよう、リモート環境にリポジトリが存在します。
リポジトリを複数持ち、共有する仕組みこそ、Gitが「分散型」とよばれる由来です。
この仕組みのおかげで、ネットワークに繋がっていないときでも、ローカルリポジトリを使ってバージョン管理できるのです。
プッシュとは
ローカルリポジトリの情報をリモートリポジトリに反映させたいときは、「プッシュ(push)」をします。
ワーキングディレクトリで指定しているブランチ情報を、そのままリモートリポジトリの指定ブランチに反映させることができます。
プルとは
リモートリポジトリの情報をローカルリポジトリに取り込みたいときは、「プル(pull)」をします。
実はこの「プル(pull)」がくせ者で、「フェッチ(fetch)」と「マージ(merge)」という2つの処理を内部でおこなっています。
- 「フェッチ(fetch)」…リモートリポジトリの情報を、ローカルリポジトリに取り込む
- 「マージ(merge)」…取り込んだリモートリポジトリのブランチ情報を、ローカルのブランチに反映させる
ここはちょっとややこしいので、以下の記事で詳しく紹介しますね。

Gitの流れ
ここまでの内容を振り返って、実際にどのようにGitを利用するのか、流れを確認してみましょう。
まず、キツネが以下のように作業します。
- ワーキングディレクトリでファイルを編集
- 編集したファイルをアド(add)
- コミット(commit)→ ローカルリポジトリの「master」ブランチにリビジョン追加
- プッシュ(push)→ リモートリポジトリの「master」ブランチにリビジョン追加
次に、タヌキが以下のような作業をします。
- プル(pull)→ リモートリポジトリの「master」ブランチを、ローカルの「master」ブランチに取り込む
ここで紹介したGitの流れは、とってもシンプルなパターンです。
ファイルやリビジョンの状態によっても、実行するコマンドは変わってくると思いますが、基本的な流れはこんな感じ。
ローカルリポジトリにリビジョンを溜めていき、そのリビジョンをリモートリポジトリを使って共有するといった流れですね。
GitとGitHubの違い
「Git」を調べていると、「GitHub(ギットハブ)」というワードを見かけることがあるかもしれません。
GitHubとは、Gitのホスティングサービス(Git機能を提供するサービス)で、GitHubをリモートリポジトリとして使うことで、複数の方と簡単にファイルを共有できるようになります。
GitHubの中でもGitが動いていますが、GitHubはブラウザから操作できる点が大きく違います。
同じようなGitホスティングサービスに、「GitLab(ギットラボ)」や「Bitbucket(ビットバケット)」などがあります。

まとめ:Gitは使いながら覚えよう!
Gitの仕組みについて、なんとなくイメージはできましたか?
Gitは覚えることが非常に多く、状況によって利用するコマンドも変わるため、読むだけで完全に理解することは難しいと思います。
自分で実際に使いながら慣れていくことで、少しずつ理解できるようになると思うので、あきらめずに頑張りましょう。
ちなみに、この記事を読んで
「う~ん、ちょっとGitは難しそう…」
って方は、プログラミングスクールなどの利用も考えてみるといいでしょう。
わからないところで詰まっても、講師に細かく質問しながら教えてもらうことができます。
独学にこだわって挫折するよりは、全然いいと思いますよ。

Gitの仕組みを理解できた方は、「Gitのインストール方法と初期設定」を読んで、実際にGitをインストールして使ってみましょう。
またね、キツネ(@kitaaaa_kitsune)でした!
