【Git】Gitの基礎を学習しよう!Gitでバージョン管理

バージョン管理は、コーディングしたファイルのバージョンを管理する仕組みのことをいいます。

ファイルの状態をその時々で保存し「いつ」「誰が」「どのように」ファイルを変更したのかを確認することができます。

特定のバージョンに状態を戻すといったこともできるため、例えば「ある変更を行ってからシステムに何らかの不具合(バグ)が発生するようになった」場合でも「その変更前のファイルのバージョンに戻す」ということができるようになります。

また、ネットワークを介して複数人でファイルを共有することができ、開発を共同で進めることもできるためチーム開発では必須のものとなります。

Gitとは

Git(ギット)はバージョン管理システムの一種です

Gitは、Gitがインストールされたパソコン内であればバージョン管理システムを使用することができます。また、ネットワークに公開されたサーバー(リモートサーバー)でGitを使用すれば、複数人で参照・更新が可能なバージョン管理を行うことができます。

ローカルでは頻繁にバージョンを保存(コミット)して、任意のタイミングでリモートサーバーに更新通知(プッシュ)するといったことが可能で、分散してバージョンを管理できることから分散型バージョン管理と呼ばれます。

Gitをインストール

Gitを利用するには、お使いのパソコンにGitをインストールする必要があります。

MacにGitをインストール

Macをお使いであれば最初からGit がインストールされている場合がありますので、既にインストールされているかどうかを確認してみましょう。

  1. ターミナルを開いてください。
    ターミナルについては【Mac】ターミナルの使い方を参考にしてください。
  2. git --versionコマンドを実行します。
    以下のようにバージョン情報が表示されていればインストールされています。

% git --version     
git version 2.24.3 (Apple Git-128)
    

バージョンが表示されない場合はGit – Download for Macからインストーラーをダウンロードしてください。

WindowsにGitをインストール

WindowsではGitをインストールする必要があります。しかし、念の為既にインストールされているかどうかを確認してみましょう。

  1. PowerShellを開いてください。
    PowerShellについては【Windows】PowerShellの使い方を参考にしてください。
  2. git --versionコマンドを実行します。
    以下のようにバージョン情報が表示されていればインストールされています。

PS C:¥Users¥xxx> git --version
git version 2.29.2.windows.2
    

gitコマンドが使用できない場合は新しくインストールする必要がありますので、【Windows】Gitをインストールしようを参考にGitをインストールしてください。

Gitをインストールしましょう

  • Gitのバージョンを確認してみよう!
  • Gitがなければインストールしよう!

Gitの初期設定

Macの方はターミナル、Windowsの方はGit Bashを開いてください。

ユーザー情報の初期設定(必須)

Gitにユーザ名メールアドレスを設定します。

ファイルを変更してバージョンを更新(コミット)するたびに、誰が更新したのかを識別するためにGitはこの情報を参照します。

以下のコマンドを各々の情報に書き換えて実行してください。


$ git config --global user.name "Hanako Yamada"
$ git config --global user.email "h.yamada@prograbi.com"
    

現在登録している情報を確認する場合は $ git config [情報名] を実行します。以下はユーザ名を確認する例です。


$ git config user.name
Hanako Yamada
    

Gitの初期設定をしましょう

  • ユーザー名を設定しよう!
  • 連絡先(メールアドレス)を設定しよう!

Gitのチュートリアル

ここでは新しくtestディレクトリを作成してリポジトリとして扱うためのチュートリアルを簡単な例で試してみましょう。

Macの方はターミナル、Windowsの方はGit Bashを開いてください。

それぞれの用語についてはGitで使用される用語についてを参考にしてください。

リポジトリを初期化する

まずは、testディレクトリを以下のコマンドで作成します。
このディレクトリは
いつでも完全に削除することができるのでどこに作成しても大丈夫です。


$ mkdir test
    

作成したtestディレクトリに移動します。


$ cd test
test $
    

リポジトリを初期化するために以下のコマンドを実行します。


test $ git init
Initialized empty Git repository in /Users/xxx/test/.git/
    

これでGitのリポジトリが新しく作成されました。

ファイルをバージョン管理に追加する

ここでは初めてのコミットを試してみます。

ファイルを作成

まずはコミットするためのファイルを作成しましょう。現在のtestディレクトリ内にテキストファイルを追加します。

このファイルの追加方法は何でもいいのですが、せっかくなのでコマンドを使用して追加してみましょう。
次のようにtouchコマンドで存在しないファイル名を指定すれば新しいファイルを作成することができます。


test $ touch demo.txt
    

demo.txtファイルが作成できました。このファイルをVimというエディタを使用して編集してみます。

次のコマンドを実行してください。


test $ vi demo.txt
    

するとコマンドラインツールにdemo.txtの編集画面が開きます。

Vimで中身を編集するためには、aキーを押す必要があります。aキーを押すと下部に-- INSERT --と表示され、編集モードに切り替わります。

この状態で「こんにちは」と入力してください。

入力が終わったら、編集モードから元の画面に切り替えるためにエスケープ(esc)キーを押します。
保存して終了するためには:wq(Write and Quit)を入力して実行します。

ステージングに追加する

コミットするファイルを指定するために、ファイルをステージングに追加します。
この「ステージングに追加」という表現は「インデックスに追加」という表現で言い換えられることもあります。

ステージングにファイルを追加するためには git add を使用します。


test $ git add demo.txt
    

また、現在の作業ディレクトリ直下にあるすべてのファイルをステージングに追加するには以下のコマンドを実行します。


test $ git add .
    

コミットする

ステージングに追加したファイルをコミットしましょう。
このコミットを行うことでステージングされたファイルをバージョンに追加することができます。

コミットにはgit commitコマンドを使用します。同時に-mオプションを使用することで、このコミットに対するメッセージを残すことができます。
メッセージは「どんな変更がどんな意図で行われたのか」を確認する際に役立つものになるのでなるべく設定するように心がけましょう


test $ git commit -m "demo.txtを新規作成しました。"
[master (root-commit) 413c612] demo.txtを新規作成しました。
 1 file changed, 1 insertion(+)
 create mode 100644 demo.txt
    

ステージングを省略し、変更がある全てのファイルをコミットする場合は-aオプションを使用します。
この方法ではステージングへの追加を省略することができますが新規作成したファイルはコミットされないことに注意してください

-aオプションを使用した例

$ git commit -a -m "メッセージ"
    

コミット履歴を確認する

コミットが完了したので、git logコマンドを使用してコミット履歴を確認してみましょう。


test $ git log
commit 413c6128fb969f428e5227ba4b6e62c45a531d74 (HEAD -> master)
Author: Hanako Yamada <h.yamada@prograbi.com>
Date:   Tue Dec 8 12:35:46 2020 +0900

    demo.txtを新規作成しました。
    

commit 413c6... となっている箇所はそれぞれ異なる値が設定されています。
この値のことをコミットのハッシュ値と言い、コミットごとに一意の値が設定されます。

コミットの変更箇所を確認する

ハッシュ値を使用して特定のコミットの変更箇所を確認することができます。
変更箇所を確認するコマンドとしてgit show [ハッシュ値]コマンドを使用します。

git showに続く値はコミット履歴で確認したハッシュ値です。環境により値が異なりますのでそれぞれ変更して実行してください。


test $ git show 413c6128fb969f428e5227ba4b6e62c45a531d74
commit 413c6128fb969f428e5227ba4b6e62c45a531d74
Author: Hanako Yamada <h.yamada@prograbi.com>
Date:   Tue Dec 8 12:35:46 2020 +0900

    demo.txtを新規作成しました。

diff --git a/demo.txt b/demo.txt
new file mode 100644
index 0000000..b016251
--- /dev/null
+++ b/demo.txt
@@ -0,0 +1 @@
+こんにちは
    

このハッシュ値は指定する長さを最小4文字まで省略することができるため、以下のように実行することもできます。


test $ git show 413c
    

特定のバージョンに戻す

git checkoutコマンドを使用してコミットした特定のバージョンにファイルなどの状態を戻すことができます。

まずは、新しくhoge.txtというファイルをコミットしてみましょう。


test $ touch hoge.txt
test $ git add hoge.txt
test $ git commit -m "hoge.txtを新規作成しました。"
    

git logコマンドで履歴を確認します。


test $ git log
commit 41b4e708c4c916f9f7f5f90a1d7c250ed47d8263 (HEAD)
Author: Hanako Yamada <h.yamada@prograbi.com>
Date:   Tue Dec 8 18:17:17 2020 +0900

    hoge.txtを新規作成しました。

commit 413c6128fb969f428e5227ba4b6e62c45a531d74
Author: Hanako Yamada <h.yamada@prograbi.com>
Date:   Tue Dec 8 12:34:36 2020 +0900

    demo.txtを新規作成しました。
    

ここでhoge.txtを追加する前のバージョンに戻してみましょう。

特定のバージョンに戻すためのコマンドはgit checkout [ハッシュ値]となります。
ここでは前のバージョンのハッシュ値は413c6...となっていますが、それぞれの環境で異なりますので変更して実行してください。


test $ git checkout 413c
Note: switching to '413c'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 413c612 demo.txtを新規作成しました。
    

実行すると、このような長いメッセージが表示されるかもしれません。(バージョンによってメッセージの内容は異なるかもしれません。)

あなたは今’detached HEAD’(切り離されたHEAD)の状態にいて、実験的に変更したりコミットすることができます。また元のブランチに切り替えることで、この状態で行うコミットは他のブランチに影響を与えずすべて破棄することができます。

もしあなたが作成したコミットを保持する新しいブランチを作成したい場合は、(今もしくは後で)-cオプションを使用したswitchコマンドを実行できます。

「または git switch - で元の状態に戻すことができます。」

つまり「完全に特定のバージョンの状態に戻っているのではなく一時的に戻っているだけ」で実験的に使用してくださいとのことです。
また、ここから派生するバージョンを本格的に使用する場合はブランチを作成する必要があります。

このブランチについては次回のチュートリアルで行います。

最後に、次のコマンドで元の状態(masterブランチ)に戻してみましょう。

元のmasterブランチに戻す(Gitバージョン2.23.0以降)

Gitの新しいバージョンではgit switchコマンドを使用することができます。
このコマンドはブランチを切り替えるもので、パラメータにハイフン(-)を指定することでmasterブランチに戻すことができます。


test $ git switch -
Previous HEAD position was 413c612 demo.txtを新規作成しました。
Switched to branch 'master'
    

元のmasterブランチに戻す(Gitバージョン2.23.0以前)

ブランチを切り替えるためにgit checkoutコマンドを使用します。(このコマンドは新しいバージョンでも使用できます。)


test $ git checkout master
    

Gitのチュートリアルを試してみましょう

Twitterでアウトプット

理解したことや分からないところはTwitterでつぶやいてみよう!

この学習ページで学んだことをTwitterでアウトプットしてください。

アウトプットするメリット

学習仲間が増える

同じ課題を持った仲間が増えるため、学習へのモチベーションが継続しやすくなります。

より深く理解する

頭では理解したと思っていても、文章化することで初めて気づくことがあります。