Git

【Git】Gitはどんな仕組みなの?Git操作の流れについて解説します!【Git初心者】

実際にGitを使う前にGitの仕組みについて知っておきましょう!
おそらく、現場ではGitの使い方は教えてもらったり、手順書があっても仕組みとかGitが裏でやっている操作についてなかなか教えてくれる人はいないと思います。

実際に”教えてもらってない”ので…この話は全部、自主学習で身に付けました(

Gitの基本的な仕組みとは?

Gitの仕組みについて図を用いて解説してきます!
ファイルの保存形式やメリットなど触れていきますね。

Gitはスナップショットで保存している


Gitがどのようにファイルを保存しているかというと、ファイルA、ファイルBファイルCをまずはバージョンAとして全て保存します。
次にファイルAとCに修正が入った場合、Gitはどのように保存するのか。

ファイルAとCは差分を保存ではなく、A’とC’をスナップショットとして丸々保存します。
ファイルBについては変更されていないので、バージョンAのものを使用します。

このようにGitはスナップショットとして記録しています。

なぜ”スナップショット”で保存しているのか?

ではなぜ”スナップショット”で保存するのでしょうか。
スナップショットで保存することで、複数人で開発する上で「スピード」を上げることができるのです。

スピード


複数人が並行して開発できるよう「ブランチ」というものを切ってバージョンを枝分かれしていきます。

図のバージョンCとバージョンDのように枝分かれすることを「ブランチ」と言います。

このブランチを分割させる・統合させる(マージ)という作業がスナップショットだと非常に早く作業ができます。

もしもGitがファイルを差分として管理していた場合、ブランチを切ったり、マージするときにいちいち「差分」を計算しなければなりません。
しかし、”スナップショット”として管理していれば、それら差分の計算をしなくて済むため、早くブランチを切ったりコミットができるようになるのです。

ここで、初歩の初歩に戻りまして…
そもそも「バージョンを記録」しておくとは、何がいいのでしょうか。

それは、「昔の状態に戻せる」ということです。
このバージョンを記録することをコミットと言います。

昔の状態に戻せる


最新のバージョンがコミットCだとします。
GitではコミットCの直前コミットとして、コミットBを記録ています。
コミットBはコミットAを直前コミットとして記録しています。

このように最新バージョンは以前のバージョンを辿ることができ、それぞれをそのままスナップショットとして保存してるため、以前の状態に戻したくなったら簡単に戻すことができるのです。

ここまでを振り返りましょう!
Gitはデータを”スナップショット”として保存しています。
Gitではコミットするときに、直前コミットを記録しているため、それらコミットを辿ることで以前の状態に戻すことができます。

これら2つのポイントはぜひイメージとして覚えておくと、Gitを使う際に「怖い!」というのがなくなると思います!

Gitの操作の流れについて

Gitの仕組みについてイメージが持てたら、操作の流れを覚えましょう!
ぜひ、操作の流れを知り、全体像を頭に叩き込んでいきましょう!

Git操作のほとんどは、ローカルで実施します。
操作の流れをしっかりと抑えておけば、Gitを使う上でほとんど困ることがなくなります。

しっかりと押さえていきましょう!
ローカル作業で覚えることは、Gitは3つのエリアに分かれています。

  • ワークツリー
  • ステージ
  • リポジトリー

ワークツリーとは、自分の作業をしている場所です。
ワークツリー内で、追加・変更・削除したファイルを保存し、ローカルリポジトリーに”スナップショット”として保存します。

ステージとは、コミットを準備する場所です。
スナップショットを記録することを「コミット」といい、ステージはこれらスナップショットを記録するための準備の場所のことを指します。
Gitでは、ステージに追加・変更・削除した情報を保存してから、その後にコミット、すなわちスナップショットとして保存します。

リポジトリーとは、コミットしたスナップショットの保存場所です。
用語についてイメージが持てたら、具体的な流れを解説します。

Git操作の流れは以下の4つです!

  1. ローカルでファイルを変更する
  2. ステージに追加する
  3. リポジトリーに保存する
  4. リモートリポジトリーアップロードする

ローカルとは”自分のパソコン上”のことを指します。
リモートリポジトリーとは、GitHubなどのオンライン上の保存場所を指します

まずローカルで「ファイルを変更」をしたら、そのスナップショットを記録していきます。
このファイルの変更や追加などを作業している場所のことを「ワークツリー」といい、この追加・変更したものをステージに追加していきます。

この追加する時のコマンドは「git add」です。

なぜ、一旦ステージに保存するのか?

ステージじゃなくてリポジトリーに保存しちゃえば良くない?

なぜ、ステージに保存しなければならないのでしょうか。
そのまま直接入れてしまえば良いのでは?と疑問に思いますよね。

開発をしていると「このファイルだけ!」と改修が完了した分だけコミットしたい!という状況があります。
Gitのコミットは、「ステージにあるものだけ」を記録するという仕組みになっています。

つまり完了した分だけ、ステージに追加しておけばそれ以外のファイルはコミットされないのです。
このリポジトリーに保存する時のコマンドは「git commit -v」「git commit -m」です。

コマンドについては、また別の記事にまとめていくので、ここでは流れのみイメージしてください。

この流れをおさらいすると…

ローカルでファイルを変更したら、まずは「git add」よりステージに追加します。
その後、スナップショットとして記録するために「git commit」より、リポジトリーに保存します。
最後に、複数人で作業するためにオンライン上のリモートリポジトリーに保存する。

ぜひ、この流れを覚えておいてください!