gitのコマンドメモ

gitをローカルで使う場合、よく使うコマンドについてのメモ。
```push```,```pull```などのリモートリポジトリとの連携は後日書こうと思います。
gitのインストールは完了している想定です。

※筆者はgitにあまり慣れていないため、誤った認識、記載があるかもしれません。ご注意ください。

## 1.リポジトリ作成
作業ディレクトリ下に移動して```git init```を実行。
これでgitリポジトリが作られる。```ls -a```で確認してやると、```.git```ができている。

```{bash}
$ git init
```
```{bash}
$ ls -a
.  ..  .git
```

## 2.ディレクトリ更新
適当な新しいファイル```a.txt```を作成してみた後に```git status```で状態を確認してみる。
現在のリポジトリでは追跡できていないファイルが表示される。

```{bash}
$ git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        a.txt

nothing added to commit but untracked files present (use "git add" to track)
```

```git add```で、更新情報を保存してやる。```--all```オプションは、変更されたファイル一式が更新される。

```{bash}
$ git add --all
```


## 3.コミット

リポジトリにコミット。```-m```以下はメッセージ。

```{bash}
$ git commit -m "first commit"
[master (root-commit) d80db16] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt
```

git statusで作業ディレクトリの更新を確認して、nothing to commitになっていれば、無事完了

```{bash}
$ git status
On branch master
nothing to commit, working directory clean
```

## 4.ブランチの作成
各自開発をしていく時には、masterからブランチを切ってやり、作業完了後にmasterに統合してやる。
今はブランチがmasterのみなので、作業用のブランチを作成してやる。

```{bash}
$ git branch mywork
```
```{bash}
$ git branch
* master
  mywork
```

新しいブランチmyworkへ移動して、切り替わっていることを確認。

```{bash}
$ git checkout mywork
Switched to branch 'mywork'
```

```{bash}
$ git branch
  master
* mywork
```

もう一度新しいファイル```b.txt```を作って、コミットしてやる。

```{bash}
$ git add --all
```
```{bash}
$ git commit -m "b.txtを追加"
[mywork 0f05c45] b.txtを追加
 1 file changed, 1 insertion(+)
 create mode 100644 b.txt
```

myworkブランチでのgitのログを見てみると、2回コミットした履歴が確認できる。

```{bash}
$ git log -p
commit 0f05c45536fc6120da0a2c6c05d5e5e17946e817
Author: user
Date:   Fri Nov 1 06:39:51 2019 +0000

    b.txtを追加

diff --git a/a.txt b/b.txt
new file mode 100644
index 0000000..3e75765
--- /dev/null
+++ b/b.txt
@@ -0,0 +1 @@
+bbbbb

commit d80db16e3263fc9b22978bafdfe790425ef17306
Author: user
Date:   Fri Nov 1 06:34:58 2019 +0000

    first commit

diff --git a/a.txt b/a.txt
new file mode 100644
index 0000000..2d832d9
--- /dev/null
+++ b/a.txt
@@ -0,0 +1 @@
+aaaaa
```

## 5.ブランチのマージ

`git merge`で、さっき新しく更新したmyworkをmasterに統合する。

```{bash}
$ git merge mywork
Updating d80db16..0f05c45
Fast-forward
 b.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 b.txt
```

## 6.過去の状態でブランチを作成する

今のディレクトリ内では```a.txt```,```b.txt```の2ファイルが存在する。

```{bash}
$ ls -a
.  ..  .git  a.txt  b.txt
```

```a.txt```を作る前のfirst commitのタイミングに戻って作業したい時は、
```git log```で記載されている```commit```以降のidを入力して```git checkout -b```を行うと、過去の状態でのブランチを作成することができる。

```{bash}
$ git checkout mywork
Switched to branch 'mywork'
```
```{bash}
$ git log 
commit 0f05c45536fc6120da0a2c6c05d5e5e17946e817
Author: user
Date:   Fri Nov 1 06:39:51 2019 +0000

    b.txtを追加

commit d80db16e3263fc9b22978bafdfe790425ef17306
Author: user
Date:   Fri Nov 1 06:34:58 2019 +0000

    first commit
```
```{bash}
$ git checkout -b mywork_first  d80db16e3263fc9b22978bafdfe790425ef17306
Switched to a new branch 'mywork_first'
```

新しいブランチができていて、```git log```も```first commit```時に戻っている。
ディレクトリ内も```b.txt```ができる前の状態に戻った。

```{bash}
$ git branch
  master
  mywork
* mywork_first
```
```{bash}
$ git log
commit d80db16e3263fc9b22978bafdfe790425ef17306
Author: user
Date:   Fri Nov 1 06:34:58 2019 +0000

    first commit
```
```{bash}
$ ls -a
.  ..  .git  a.txt
```