Gitをつかうための基本的なコマンドライン

#最初に
Gitを使うときには、GUI（SourceTreeなど）か、CUI（ターミナルなど）を使った操作になると思います。
GUIを使っている人がCUIを使ってみたいと思ったときに、最低限必要と思われるコマンドラインをまとめました。

ここで記載したコマンドはあくまで一部なのと、オプションの付け方次第で色々な用途に使えることがあるので、やってみたいケースがあったら検索をしてみるといいと思います。

また、人によって、状況によっても、これ使っても大丈夫・だめと色々ありますので、自分のGitへの理解度とかを考慮して、事故らない程度に色々コマンドを使ってみるといいと思います。

<font color="red">:warning: 操作についてはMacのターミナルで検証しているため、Windowsでの動作は保証しかねます。ご注意ください。</font>

#実際の利用方法
## <font color="tomato"><i class="fa fa-flag"></i></font> 状態の確認
最初にワーキングツリー（作業フォルダ）まで移動してからコマンドを実行します。

```text:ステータスを確認する
$ git status
```

何かコマンドを打つたびに、このgit statusで状態を確認して、正しくコマンド操作が行われたかを確認するといいです。


## <font color="tomato"><i class="fa fa-flag"></i></font> ブランチの切り替え
:warning:  差分が出ている状態は事前に<a href="#%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E5%89%8D-stash%E4%BD%9C%E6%A5%AD%E3%82%92%E9%9A%A0%E3%81%99">stash</a>や<a href="#-%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%8B%E3%82%89pull%E3%81%99%E3%82%8B">commit</a>してください。

```text:ブランチの切り替え
$ git checkout 【ブランチ名】
```

### :white_check_mark: 小技集
####  ローカルのブランチ一覧を確認したいとき。
```text:ローカルブランチを確認
$ git branch
```

####  リモートのブランチ一覧も確認したいとき。
```text:リモートブランチも確認
$ git branch -a
```

## <font color="tomato"><i class="fa fa-flag"></i></font> 最終編集者の確認
コードの最終編集者を確認したいときに。行単位で確認できます。
コンフリクトしたときなどに、誰のコードとコンフリクトしたかのチェックもできます。

```text:指定したファイルの行単位での最終編集者や最終コミットがわかる
$ git blame 【ファイル名】
```


## <font color="tomato"><i class="fa fa-flag"></i></font> ブランチの作成
新しい機能などを作成するときに、新しくブランチを作成するときに行います。

```text:現在いるブランチからtest_branch_aを作成して、test_branch_aへチェックアウトする
$ git checkout -b test_branch_a
```
上記は下記を行った場合と同じ結果になります
<pre>//現在いるブランチからtest_branch_aを作成する
$ git branch test_branch_a
//test_branch_aへブランチを移動する
$ git checkout test_branch_a</pre>

## <font color="tomato"><i class="fa fa-flag"></i></font> ローカルブランチの削除
削除するブランチ以外のところへブランチを移動して行います。

```text:test_branch_dを削除。こちらはpushがされてないコミットがあっても削除する。
$ git branch -D test_branch_d
```

または

```text:test_branch_dを削除。pushができてないコミットがあると削除されない。
$ git branch -d test_branch_d
```


## <font color="tomato"><i class="fa fa-flag"></i></font> リモートブランチからpullする
pullをすると、リモートブランチからローカルブランチに最新のコミットを反映させることができます。


```text:test_branch_dを削除。pushができてないコミットがあると削除されない。
$ git pull origin test_branch_b
```

または

```text:現在のブランチのリモートブランチからmergeを行います。同時にfetchを行えます。
$ git pull
```

## <font color="tomato"><i class="fa fa-flag"></i></font> リモートブランチへpushする
<pre>//差分が出ているファイルを、すべてステージする
$ git add .
//ステージした差分をcommitする。vimが起動してコメント入力を求められます。
$ git commit
//コミットをリモートブランチのtest_branch_aへpushする
$ git push origin test_branch_a</pre>
上記の1行目のgit add .はあくまで指定方法のひとつなので、一部ファイルのみのコミットなどのときは、下記のように指定方法を変えてください。
### :white_check_mark: 小技集
####  ステージのファイル指定方法
```text:【単体ファイル】test/file.htmlをステージする
$ git add test/filea.html
```
```text:【複数ファイル】test/filea.htmlと、test/fileb.htmlをステージする
$ git add test/filea.html test/fileb.html
```

### アンステージのファイル指定方法
git add でステージしたファイルを外します。

```text:【単体ファイル】test/filea.htmlをアンステージする
$ git reset HEAD test/filea.html
```
```text:【複数ファイル】test/filea.htmlとtest/fileb.htmlをアンステージする
$ git reset HEAD test/filea.html test/fileb.html
```

## <font color="tomato"><i class="fa fa-flag"></i></font> うっかり間違えてほかのブランチで作業を開始した
状況によって異なりますが、コミット前ならstash。コミット済みならcherry-pickを使います。
### コミット前 stash（作業を隠す）
stashを行ったら、正しいブランチでstash applyを行うことで、差分を正しいブランチで反映させます。

```text:差分を保存
$ git stash
```

または

```text:stashの際にコメントを入れる場合
$ git stash save "間違って作業したもの"
```

```text:stashした一覧を確認する
$ git stash list
```

```text:listに入れたものを復元させる。
$ git stash apply@{0}
```



### コミット済み cherry-pick（特定ブランチの反映）
誤って行ったコミットのハッシュをコピーしておいて、正しいブランチでcherry-pickをすると変更をコピーできます。
コピーしたあとは、間違ったコミットは削除します。

```text:正しいブランチで間違ったハッシュをcherry-pickする
$ git cherry-pick XXXXXXXXXXXXXXXXXXXXX 
```

削除するときは、元の間違ったブランチへcheckoutしてからおこないます。

```text:一つ前のコミットを削除する。最後の^が一つなので、コミットを一つ削除できます。2つ前まで削除の場合は^^となります。
$ git reset --hard HEAD^
```

### :white_check_mark: 小技集
```text:ハッシュを調べる
$ git log
```