普段は使わないけど、たまに使うGithubコマンド集

# はじめに
普段は使わないけど、たまに使うGitコマンドをまとめました。

## 記事の趣旨
特定のGitコマンドを忘れてしまったときに、すぐに参照できるようまとめました。完全に主観です。

## こういう方へ向けです
- `clone`、`add`、`commit`など、よく使うコマンドは問題ないけれど、たまにしか使わないコマンドを忘れてしまう方
- 特定の操作を行うコマンドを思い出せない方

# Githubコマンド一覧

## 設定編

### UserName を設定
Gitのユーザー名を設定するコマンド
```
$ git config --global user.name "[name]" 
```


### メールアドレス を設定
Gitのメールアドレスを設定するコマンド
```
$ git config --global user.email "[email address]"
```

## ブランチ編

### リモートブランチをチェックアウトしてローカルブランチを作成
リモートブランチをチェックアウトし、同名のローカルブランチを作成するコマンド

``` shell
$ git checkout -b [branch name] origin/[branch name]	
```

### ブランチ名を変更
既存のブランチ名を変更するコマンド

``` shell
$ git branch -m [old branch name] [new branch name]
```

### リモートでマージ済みのローカルブランチを削除
リモートでマージ済みのローカルブランチを削除するコマンド

``` shell
$ git branch -d [branch name]
```

### リモートでマージされていないローカルブランチを強制的に削除
リモートでマージされていないローカルブランチを強制的に削除するコマンド

``` shell
$ git branch -D [branch name]
```
※マージされているかはチェックされません。

### ローカルブランチを一掃する
リモートで削除されたブランチをローカルからも削除するコマンド

```shell
$ git fetch --prune
```

### masterとdevelop以外のマージ済みのローカルブランチを削除する
masterとdevelop以外のマージ済みローカルブランチを一括削除コマンド
```shell
$ git branch | grep -Ev "master|develop" | xargs git branch -D
```

## コミット編

### ファイルのない状態でコミットしたい

```shell
$ git commit --allow-empty -m "commit message"
```

## マージ編

### `master`のブランチを現在のブランチにマージする
現在のブランチにmasterブランチをマージするコマンド

```
$ git merge master 
```
※事前に`master`ブランチをpullする必要があります。


### マージしようとしたら、コンフリクトが発生したので、マージを取り消したい
マージ中にコンフリクトが発生した場合、マージを中止するコマンド

```shell

$ git merge --abort
```

### マージしようと思って操作したら、わけわからなくなったので、取り消したい
操作が混乱した場合、最新のコミットにリセットするコマンド

```shell
$ git reset --hard HEAD
```

### マージできたけど、マージを取り消したい
マージ後にマージを取り消するコマンド

```shell
$ git revert [commit No]
```

## リベース編

### `master`のブランチを現在のブランチにリベースする
現在のブランチにmasterブランチをリベースするコマンド

``` shell
$ git rebase master
```

### 複数コミットをひとまとめにする
複数のコミットを1つにまとめるコマンド
※例では4つのコミットをまとめます

``` shell
$ git rebase -i HEAD~4
```
※その後の操作に関しては、@KTakata さんの[git rebase についてまとめてみた](https://qiita.com/KTakata/items/d33185fc0457c08654a5) を参照ください

### リベース中にコミットの作成日を適用日と同じにしたい
リベース中にコミットの作成日を適用日と同じにするコマンド

``` shell
$ git rebase --committer-date-is-author-date
```

cf. [Git - git-rebase Documentation](https://git-scm.com/docs/git-rebase)

## プッシュ前にどうにかしたい編

### git add 後に全ファイルを取り消す
git add 後に全ファイルのステージングを取り消すコマンド

``` shell
$ git reset HEAD .
```
※`.`をファイル名にすると、そのファイルだけをadd前にできる

### git commit 後にファイルの変更ごと取り消す
git commit 後にファイルの変更を取り消すコマンド
``` shell
$ git reset --hard HEAD^
```

### git commit 後にコミットだけ取り消す
git commit 後にコミットだけを取り消すコマンド

``` shell
$ git reset --soft HEAD^
```

### git commit 後にコミットを上書きする
git commit 後にコミットを上書きするコマンド

``` shell
$ git commit --amend
```

## ファイルをごにょごにょする編

### 変更したファイルをなかったことにする
変更したファイルを元に戻すコマンド

``` shell
$ git checkout . 
```
### 全ファイルのキャッシュを削除する
全ファイルのキャッシュを削除するコマンド

``` shell
$ git rm -r --cached .
```

### ファイル名を指定してキャッシュを削除する
特定のファイルのキャッシュを削除コマンド

``` shell
$ git rm -r --cached [file name]
```

## ファイルをいったんどうにかしたい編

## 変更したファイルを一時的においておく
変更したファイルを一時的にstashするコマンド

``` shell
$ git stash save
```
## 一時的においておいたリストを表示する
shashした変更のリストを表示するコマンド

``` shell
$ git stash list
```

## （最新の）0番目に待避させたファイルをブランチに適用する
最新のスタッシュを適用するコマンド

```
$git stash apply stash@{0}
```
※`git stash list` で表示される `stash@{n}` を指定する 


# 参考元
以下のサイトを参考にさせて頂きました。
[git--fast-version-control/Reference](https://git-scm.com/docs)
[サルでもわかるGit入門〜バージョン管理を使いこなそう〜](https://backlog.com/ja/git-tutorial/)
[Git Commands](https://github.com/joshnh/Git-Commands)
[git commit を取り消して元に戻す方法、徹底まとめ](http://www-creators.com/archives/1116#1_git_commit)