Git入門

#0 はじめに
Git入門の備忘録を記載する。

参照

- [Git入門](https://dotinstall.com/lessons/basic_git)
- [サル先生のGit入門](https://backlog.com/ja/git-tutorial/contents/)

# 1 gitとは何か？ 

```
gitのバージョンを確認する。
$ git --version
```

# 2 バージョン管理の流れを理解しよう

バージョン管理の流れには、①作業ディレクトリ(ワークツリー)、②ステージングエリア（インデックス）、③リポジトリ（ローカル、リモート）がある。

|状態|内容|
|---|---|
|作業ディレクトリ|作業ディレクトリではファイルを作ったり修正したりする。|
|ステージングエリア|ある程度まとまりになったらステージングエリアにいく。|
|リポジトリ|最後にきれいにまとまったものを履歴データベースに保存する。ローカルは個人PCで、リモートは共有するために用いる。|



# 3 gitの設定
gitでは名前とEmailを記載するようになっているので初期設定する。

```
gitは名前とEmailを設定する。
$ git config --global user.name "hdk"
$ git config --global user.email “hdk@gmail.com”

メッセージを色分けする。
$ git config --global color.ui true

設定情報を確認する。
$ git config -l
```

# 4 初めてのコミットをしてみよう

```
$ mkdir myweb
$ cd myweb
初期化処理する。
$ git init
$ vim index.html
1．作業ディレクトリ -> 2. ステージングエリア（インデックス）
$ git add index.html
2. ステージングエリア（インデックス）-> 3. リポジトリ（ローカル）
$ git commit index.html
メッセージを書き込む必要があるので、「initial commit」などとわかりやすく記載する。

ログを確認する。
$ git log
```

# 5　gitのログを確認してみよう。

```
ログを確認する。
$git log

ログを1行で表示する。
$git log　--oneline

変更箇所だけを見る。
$git log　-p

ファイルの変更箇所の数をみる。
$ git log　-stat
```

# 6 現在の状態を把握しよう 

```
ファイルがどのような状態なのかを確認する。
$ git status

正しく修正しており更新する場合は、1．作業ディレクトリ -> 2. ステージングエリア（インデックス）とする。
$ git add index.html

間違って修正した場合は、ファイルをもとに戻す。
$ git checkout -- index.html
```

# 7 差分を確認してみよう

```
どこをどう変更したか確認する。
$ git diff
$ git diff -cached
```

# 8 gitでのファイル操作について

```
indexのhtmlファイルのみをステージングエリアに移行する。
$ git add index.html
フォルダ直下のファイルをすべてステージングエリアに移行する。
$ git add .
htmlファイルを移動する。
$ git mv index.html
```

# 9 git管理に含めない設定について 

バージョン管理をする必要がない、意味がないログファイルなどを無視したい場合の操作について説明する。

```
$ vim .gitignore

.gitignoreファイルで編集する。
*.log 
と記載することで.logファイルを無視するように設定できる。
```

# 10 直前のコミットを変更する

```
$ vim index.html
$ git add .
$ git commit -m "ライン2を追加"
$ git log
```

コミットするほどでもない追加事項がある場合は、「--amend」を用いる。

```
$ vim index.html
$ git add .
$ git commit --amend
$ git log
```

# 11 過去のバージョンに戻ってみよう (1) 

バージョン管理のよいてっはいつでも過去に戻って間違いがなかったようにできることである。

```
$ vim index.html
$ git add .
```

それで前のコミットに戻りたい。

```
$ git reset --hard HEAD
または
$ git reset --hard IDを記載する
```

# 12 過去のバージョンに戻ってみよう (2)

# 13 ブランチを使ってみよう 

ブランチには主に統合ブランチとトピックブランチがある。

統合ブランチはリリース版が何時でも作成可能なようしておくためのブランチです。そのため、安定した状態を保っておくことが重要です。通常、masterブランチを統合ブランチとして使用します。

トピックブランチは、機能追加やバグ修正といったある課題に関する作業を行うために作成するブランチです。複数の課題に関する作業を同時に行う時は、その数だけトピックブランチが作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139678/6e84d90f-f7d4-45a2-c00c-041c8e0ca590.png)


```
ブランチの一覧を表示する。
$ git branch
*master

新しいブランチ「hoge」を作るときは、
$ git branch hoge

hogeに移動するときは
$ git checkout hoge

masterに移動するときは
$ git checkout master

```

# 14 ブランチをマージしてみよう 

```
$ git branch
hoge
*master

hogeのほうで作られたものをmasterにマージする。
$ git merge hoge

もうマージしたのでhogeがいらないときは削除しましょう。
$ git branch -d hoge

$ git branch
*master
```

#15 マージの衝突を解決してみよう (1)

```
ブランチ「hogehoge」を作成して「hogehoge」にチェックアウトしたい
$ git checkout -b hogehoge

$ git branch
*hogehoge
master

同じ行を書き直してマージするとコンフリクト衝突が発生する。
```

#16 マージの衝突を解決してみよう (2) 

```
$ vim index.html
コンフリクトしている場合は統一したい方に修正する。コメントなどは削除する。
その後は素直にコミットできる。
$ git add .
$ git commit -m "ライン2を追加"
```

# 17 タグを使ってみよう

リリースタグには注釈付きタグを使ってコメントや署名を追加します。 軽量タグはローカルで一時的に使用する使い捨てなどに使用します。

軽量タグ

- 名前を付けられる

注釈付きタグ

- 名前を付けられる
- コメントを付けられる
- 署名を付けられる


```
$ git log
git logしたときに見られる番号commit IDをわかりやすい言葉に置き換えるのがタグの機能である。

直近のcommit IDにタグをつける
$ git tag v1.0
$ git show v1.0

指定したcommit IDにタグをつける
$ git tag v0.9 CommitのID

タグを削除する
$ git tag -d v0.9
```

#18 エイリアスを使ってみよう 

```
コマンドを省略して登録する。
$ git config --global alias.co checkout
$ git config --global alias.st status
$ git config --global alias.br branch
$ git config --global alias.ci commit

使用例
$ git st


登録してコマンド一覧の表示
$ git config -l
```

#19 はじめての共同作業 

共有リポジトリ

- ourweb.git

ローカル

- Aさん myweb
- Bさん myweb2

```
共有リポジトリ
$ cd ourweb.git
$ git init --bare
```

#20 共有リポジトリにpushしてみよう 

Aさんが共有リポジトリに登録する場面を想定する。


リモートリポジトリのアドレスは名前を付けて記録しておくことができます。記録しておくと、pushするときには毎回長いリモートリポジトリのアドレスを入力する必要がなくなります。

まずは「origin」という名前でリモートリポジトリを登録してからpushを行います。
リモートリポジトリを追加するには、remoteコマンドを使用します。<name>は登録名、<url>はリモートリポジトリのURLを指定します。

```
$ git remote add origin ~/ourweb.git
```

```
originに向かってmasterを突っ込む
$ git push origin master
```

#21 リポジトリの内容を共有してみよう 

Bさんが共有リポジトリから共有する場面を想定する。

リポジトリを複製するにはcloneコマンドを使用します。<repository>はリモートリポジトリのURL、<directory>は複製先のディレクトリ名を指定します。

```
$ git clone ~/ourweb.git/ myweb2
```

Bさんが編集して共有リポジトリに登録する。

```
$ vim index.html
$ git add .
$ git commit -m "line2 added"
$ git push origin master
```

Aさんが、更新された共有リポジトリからローカルリポジトリにマージする。

```
$ git pull origin master
```

#22 共有時のトラブルを解決する 

```
vim index.html
コンフリクトが起きたところを削除する。

$ git commit -am "conflict fixed"
$ git push origin
```