Gitの使い方について
Tags: git, beginners
Published: 2018-07-11 04:41:58

---
title: Gitの使い方について
published: true
description: Gitの使い方を説明します
tags: git,beginner
---


本記事では簡単なgitの使い方を説明しています。


筆者の環境
- OS:windows7 32bit
- コンソール:power shell

# 少しだけgitの説明
git はソースコードの変更履歴を管理するソフトウェアです。
特徴としては以下の通りです
- 管理するソースの大小は問わない
	- Linuxのような2千万行を超える巨大なコード
	- 個人制作の小さなプラングイン
	- など様々なソフトウェアで活用。
- 長年の利用実績がある
	- 2005年に最初のバージョンが開発され、10年以上の利用実績がある。
- 無料である


gitが導入されていないことによる課題として以下のものがあります

- 本番環境で動いているバイナリのバージョンがわからない。
- 報告されたデータが開発チームのバージョンで再現しない
- ソースコードのマージは技術力のある技術者が注意深く時間をかけて行っている。
- 本番にマージされていない他人の変更を手早く取り込んで手元で検証できない。
- 並行開発で進めているソースが本番と乖離しすぎる

もちろんgitは銀の弾丸ではないので導入するだけで
問題が解決するわけではありませんが、
管理者と開発者の手間は大きく減らすことができます。

#早速使ってみよう

## 1.バージョン管理対象のフォルダへ移動する

まず、バージョン管理を行うフォルダを作りそこに移動します。

```
cd c:\
mkdir story
cd story

```


## 2.gitを初期化する

gitを初期化するには`git init`とコマンドを打ちます

```
git init

```

するとstoryフォルダ内に.gitというフォルダが作成されました。

![git](https://thepracticaldev.s3.amazonaws.com/i/0ei38bnbspa80z7xjsu4.png)

gitは内部的な処理でこのフォルダに変更を記録していくようになっています
(gitを利用するだけならこのファイルを自分で触る必要はありません。)

## 3.記録するするユーザー名を設定する

gitには変更記録として変更内容とともに、だれが変更したか？を記録します。
以下のコマンドであなたの記録に登録する名前とメールアドレスを設定します。


>note:`hogehoge`と`hogehoge@example`をあなたの名前とメールアドレスにしてみてください。

```
git config --global user.name hogehoge
git config --global user.email hogehoge@example.com

```

## 4.記録対象のファイルを編集する

それではさっそく記録対象のファイルを作成します。
まず最初のバージョンとしてからのファイルを作成します。
適当なエディタでstory直下に`memo.txt`という空のファイルを作成してください


```
PS C:\story> dir


    ディレクトリ: C:\story


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2018/07/11     11:35          0 memo.txt


```

## 5.gitに変更したファイルを記録(commit)する

以下のコマンドでgitに変更を登録します。

```
git add memo.txt
git commit -m "first commit"

```

2行目の"first commit"が記録するときのメッセージ(コミットメッセージ)
といいます。

実行結果
```
PS C:\story> git add memo.txt
PS C:\story> git commit -m "first commit"
[master (root-commit) 7bbaaca] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 memo.txt
```

このコマンド完了後に`git log`コマンドでgitの履歴を確認してみましょう。
最初のバージョンが記録されたことがわかります！

```
PS C:\story> git log
commit 7bbaacae2f0ff56573ce60497ec96db2886cc78e (HEAD -> master)
Author: hogehoge <hogehoge@example.com>
Date:   Wed Jul 11 11:37:55 2018 +0900

    first commit
```



## 6.手順4,5を何度か繰り返す

それではmemo.txtに適当なお話を追加しつつ、変更記録をバージョンとして記録していきます。

```
PS C:\story> echo "A long time ago " >> memo.txt
PS C:\story> type .\memo.txt
A long time ago
PS C:\story> git add .\memo.txt
PS C:\story> git commit -m "add period"
[master 531432b] add period
 1 file changed, 0 insertions(+), 0 deletions(-)

PS C:\story> echo "in a glaxy far," >> memo.txt
PS C:\story> type .\memo.txt
A long time ago
in a glaxy far,
PS C:\story> git add .\memo.txt
PS C:\story> git commit -m "add place"
[master aa3c2de] add place
 1 file changed, 0 insertions(+), 0 deletions(-)


PS C:\story> echo "far away.... ">> memo.txt
PS C:\story> type .\memo.txt
A long time ago
in a glaxy far,
far away....
PS C:\story> git add .\memo.txt
PS C:\story> git commit -m "explain about place"
[master 74768be] explain about place
 1 file changed, 0 insertions(+), 0 deletions(-)
PS C:\story> t

```

echoコマンドによるファイル書き込みと
バージョン記録をそれぞれ3回行いました。

※typeコマンドは内容確認のために打っています。

memo.txtファイルの内容は以下のように変わっています。
```
A long time ago
in a glaxy far,
far away....
```


## 7.gitの履歴を確認する

それでは記録したバージョンの履歴を確認してみましょう。

`git log`今までのバージョン履歴はコマンドで確認できます。

※通常は新しい順で表示されますが、今回は--reverseオプションを付けて古い順に表示しています。

```
PS C:\story> git log --reverse
commit 7bbaacae2f0ff56573ce60497ec96db2886cc78e
Author: hogehoge <hogehoge@example.com>
Date:   Wed Jul 11 11:37:55 2018 +0900

    first commit

commit 531432b6a496d0a9d25b6c43f8bf773baa737c82
Author: hogehoge <hogehoge@example.com>
Date:   Wed Jul 11 11:44:02 2018 +0900

    add period

commit aa3c2de5e9ed92be14ef324878c6354be1c200ea
Author: hogehoge <hogehoge@example.com>
Date:   Wed Jul 11 11:45:21 2018 +0900

    add place

commit 74768be738a0dc3213ca6913ccdca9c6665e5fc7 (HEAD -> master)
Author: hogehoge <hogehoge@example.com>
Date:   Wed Jul 11 11:46:42 2018 +0900

    explain about place    
```

## 8.戻したいバージョンに戻してみる(reset)

それではここでバージョン管理システムの威力を発揮させたいと思います。
この例では
- 1つ目のバージョン:空ファイルの作成
- 2つ目のバージョン:時間の記載(A long time ago)
- 3つ目のバージョン:場所の記載(in a glaxy far,)
- 4つ目のバージョン:場所の補足(far away....)

という風にバージョンを記録してきました。
ここで2つ目のバージョンの状態にファイルの内容を戻してみまたいと思います。

ファイルを戻すのには`git reset --hard <バージョン>`を使います。

commitのid(正確にはコミットのハッシュといいます)はgit logコマンドの結果の各"commit"の右に表示されている値になります。

| バージョン     | commitのid                                | 
|-----------|------------------------------------------| 
| 1つ目のバージョン | 7bbaacae2f0ff56573ce60497ec96db2886cc78e | 
| 2つ目のバージョン | 531432b6a496d0a9d25b6c43f8bf773baa737c82 | 
| 3つ目のバージョン | aa3c2de5e9ed92be14ef324878c6354be1c200ea | 
| 4つ目のバージョン | 74768be738a0dc3213ca6913ccdca9c6665e5fc7 | 

※このcommitのidの値はは環境によって違ってくるので注意してください。


2つ目のバージョンのcommitは`531432b6a496d0a9d25b6c43f8bf773baa737c82`ですので
戻すバージョンとしてこれを指定します


```
PS C:\story> git reset --hard 531432b6a496d0a9d25b6c43f8bf773baa737c82
HEAD is now at 531432b add period
```

ここでmemo.txtを参照してみます。

```
PS C:\story> type memo.txt
A long time ago
```

memo.txtの内容がバージョン2時点での状態に戻せました！

以上が簡単なgitによるバージョン管理の例になります。
gitはもっと高機能ですが、この手順書内の内容だけで、以下のようなことができます。


>半期の会計処理中に3月前のデータに矛盾したものが見つかった。
>どうやら最新バージョンでは出来ようのないデータらしい。
>最新バージョンのソースをローカルにコピーして、
>データが作られた時期のバージョンに戻して、
>このデータが作成された原因をデバッグで探ろう

といったことができます。

ここで説明した内容はほんの初歩的なものになりますので、
公式のgitのチュートリアルを進めるなどしてさらに理解を深めてください。

https://git-scm.com/book/ja/v2

皆様がgitを学習して更なるバージョン管理の活用を実践されることをご期待します。