Git の基本的な使い方(ローカルリポジトリ編)

gitとは?

Gitとは、分散型バージョン管理システムと一言で言えます。ですが、多くの人にとってこれでは意味がわかりません。
特に分散型の意味がわかりづらいのでもう少し噛み砕いて別の例で考えてみます。

スポーツで考えてみましょう。

通常、複数人で一つの試合を実施します。各人それぞれその試合までに練習をしていて、最終的に一つの試合という形で現れます。
この最終的に現れた試合がプログラミングって言うのであればシステムになるのです。要は、それぞれが自由に作業をしていくことができ、それを1つにまとめることができるシステムだといえます。

Git の基本的な流れ

まずはじめにGitの基本的な流れを説明していきます。

ワーキングツリー

ファイルの編集作業を行なっていく場所になります。

ステージング・エリア

リポジトリにコミットしたいファイルを格納するための場所です。インデックスとも呼ばれます。

ワーキングツリーでの変更ファイルを、このステージングエリアにあげてその後リポジトリにコミットします。

なぜステージングエリアがあるのか?

ステージングエリアがあることによって、いきなり保存されずに、保存するファイル(フォルダ)を選択してリポジトリに格納することができます。

リポジトリ

日本語の意味は、「貯蔵庫」という意味です。インデックスに収められたデータを格納します。その名の通り、アプリケーション開発にて使用する情報がデータベースのような形で収められています。

ローカルリポジトリとは

リポジトリにはローカルとリモートが存在します。今回はローカルのみに標準を合わせて紹介します。上記の作業の流れにおける「リポジトリ」が、ローカルリポジトリとなります。
すなわち、ローカルリポジトリとは、自身のpc内に存在し、コミット履歴とファイルを記録する場所であると言えます。

gitはスナップショットで保存していく

Gitのデータの格納は、 前のバージョンの差分のみを保存していくのではなく、その時点でのすべてのデータの状態をスナップショットとして収納していきます。

そのため、大規模開発において、他の人が作ったデータ同士をマージする際や、前のバージョンに戻したりすることが高速で処理をすることができたりします。

実際のコードで流れを確認する

gitでの管理の開始

git init 

ステージングにあげる

git add <filename>

ワーキングツリー上で編集および追加したファイルをステージング環境へ追加する。

リポジトリに追加

git commit -m “メッセージ内容”

ローカルコミットを実行する。

変更を元に戻す

上記が基本的なgit の使い方の流れとなりますが、実際にgitを使っていくにあたり、コミットのし忘れやステージングのし忘れは出てきてしまいます。
個人プロジェクトであれば、個人がわかれば良いのですが、複数人が作業する場合であれば、どの程度の粒度でpushするのかというのがポイントにもなってきますので、塊を作れるようにしていく必要があります。

そのため、ここでは、間違えてaddやcommitした時の修正の仕方をお伝えしていきます。

ステージングエリアからワーキングツリーに戻す

ステージングエリアのファイルの変更内容をインデックスから削除するには、
git resetコマンドを利用します。

下記のコマンドで現状のステージングエリアにあるファイルをすべてワーキングツリーに戻します。

git reset

git reset HEAD

*HEADとは、最新を示す識別子のことです。そのため、上記のコードを翻訳すると、最新のステージングエリアにあるファイルを戻すことを意味します。

ファイル単位で行う際には、下記を実行します。

git reset sample.php

git reset HEAD sample.php

私はあまりやりませんが、ディレクトリ単位で指定することも可能です。

git reset /samles/
git reset HEAD /samples/

ファイルそもそもの削除

git rm を使って、gitの管理下にあるファイルを削除ができます。

git rm --cached <filename> 

*削除となるため、通常はgit resetを使うと良いでしょう。

コミット取り消し

直前のコミットをなかったことにするためには、下記コマンドを使用します。

git reset --hard HEAD^

オプションは下記のように変更することが可能です。

–hardオプション:コミットを取り消した上でワークツリーの内容も書き換えたい場合に使用。

—mixed オプション:

–softオプション:ワークディレクトリの内容はそのままでコミットだけを取り消したい場合に使用。

過去のコミットを打ち消す

revertを使用することで、指定したコミットの内容を打ち消すコミットを作り出すことができます。

Git revert <commit>

*既存のコミットの履歴は消えないので、resetとはこの点は異なってくる。

直前のコミットを上書きする

–amendオプションで直前のコミットを上書きすることができます。

ファイルの追加漏れがあった、コミットメッセージを修正したくなった、レビュー対応したなどのときに使うと良いでしょう。

git commit --amend

*git commit —amend —no-editとすると、メッセージなしで追加することができる。

ブランチについて

複数人で開発する際、各々のPCでそれぞれ修正し、それぞれのPCからサーバー上に反映させようとすると、不整合が生じてしまいます。並行して複数機能を開発していく。

Aさんがヘッダーを追加、Bさんがフッターを追加していたとしても、他の人の変更の影響を受けなくなり独自にヘッダーを追加してブランチを作ることができるのです。

ブランチを作る

git branch sample1

ブランチの確認

git branch
    *master   
    sample1

コメントを残す