Gitコマンド一覧

##- 名前とメールアドレスの設定
```
$ git config --global user.name "Firstname Lastname"
$ git config --global user.email "your_email@example.com"
```

##- 名前とメールアドレスの確認
```
$ git config user.name
$ git config user.email
```
##- 設定内容の確認
```
$ git config --list
$ git config 設定名
```

##- SSH Keyを作成
```
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
```

|オプション  |説明 |
|:----------|:------------------|
| -t        |鍵タイプを指定する|
| -b        |鍵の長さを指定する|
| -C        |鍵のコメントを新規作成する|

- 秘密鍵： id_rsa
- 公開鍵： id_rsa.pub

##- 公開鍵の内容を確認
```
$ cat ~/.ssh/id_rsa.pub
```

##- 公開鍵の内容をクリップボードへコピー（Windows）
```
$ clip < ~/.ssh/id_rsa.pub
```

##- GitHubと接続確認
```
$ ssh -T git@github.com
```

##- 日本語の文字化け対策
```
$ git config --global core.quotepath false
```

##- コマンドプロンプトの日本語の文字化け対策（一時的）
```
$ set LANG=ja_JP.UTF-8
```

##- 改行コードの自動変換をOFFする
```
$ git config --global core.autocrlf false
```

##- 出力内容の色分け
```
$ git config --global color.ui auto
```

##- リポジトリを初期化
```
$ git init
```

##- ステージング・エリアへファイルを追加
```
$ git add ファイル名
```

- 作業ディレクトリ内の全てをステージング・エリアへ追加

```
$ git add -A
```

##- コミット
- 1行のコミットメッセージを記述

```
$ git commit -m "コミットメッセージ"
```

- 詳細なコミットメッセージを記述

```
$ git commit
```

##- addとコミットを同時に行う(追跡されたファイル全てが対象)
```
$ git commit -am "コミットメッセージ"
```

##- 直前のコミットを取り消す
```
$ git reset --hard HEAD^
```

##- 直前のコミットメッセージを修正
```
$ git commit --amend
$ git commit --amend -m "コミットメッセージ"
```

##- コミット後の変更を取り消す
```
$ git reset --hard HEAD
```

##- コミットを取り消す（指定したコミットの状態に戻す）
```
$ git reset --hard ハッシュ値
```

##- HEADに複数のコミットをまとめる
```
$ git rebase -i HEAD~数字
```

先頭以外のpickをfixupと書き換えて保存する。

##- 一時的に特定のコミットに移動する
```
$ git checkout ハッシュ値
```

##- リポジトリで行われた作業のログとハッシュ値を全て確認
git resetを取り消したい場合に便利(Garbage Collectionに注意)

```
$ git reflog
```

##- リポジトリの状態を確認
```
$ git status
$ git status　-s
```
|状態      |説明 |
|:-------- |:------------------|
| ??       |まだ追跡されていない新しいファイル|
| A        |ステージング・エリアに追加されたファイル|
| M        |変更されたファイル|

- 1文字目はステージされたファイルの状態
- 2文字はファイルが変更されたかどうか

##- コミットログを確認
```
$ git log
```

- ファイルの差分を表示

```
$ git log -p
$ git log -p ファイル名
```

##- 変更差分を確認
- 作業ディレクトリとステージング・エリアの変更差分

```
$ git diff
```

- 作業ディレクトリと最新コミットの変更差分

```
$ git diff HEAD
```

##- ブランチの一覧表示 & 現在のブランチを確認
```
$ git branch
```

##- ブランチの作成
```
$ git branch ブランチ名
```

##- ブランチの切替
```
$ git checkout ブランチ名
```

##- ブランチを作成し、切り替える
```
$ git checkout -b ブランチ名
```

##- 1つ前のブランチに切り替える
```
$ git checkout -
```

##- ブランチをマージする
```
$ git checkout マージ先ブランチ
$ git merge --no-ff マージするブランチ名
```

##- ブランチを削除する
```
$ git branch -d ブランチ名
```

##- ブランチ名を変更する
```
$ git branch -m 旧ブランチ名 新ブランチ名
```

##- ブランチのツリー表示
```
$ git log --graph
```

##- コミットしていない状態の変更ファイルを全て退避する
```
$ git stash
```

##- stashを一覧表示する
```
$ git stash list
```

##- 退避したstashを取り出す
```
$ git stash apply stash@{数字}
```

##- stashを削除する
```
$ git stash drop stash@{数字}
```

##- stashの取り出しと削除を同時に行う
```
$ git stash pop stash@{数字}
```

##- リモートリポジトリを登録
```
$ git remote add 追加するリモートリポジトリ名 git@github.com:ユーザ名/リポジトリ名.git
$ git remote add origin git@github.com:ユーザ名/リポジトリ名.git
```

##- リモートリポジトリを削除
```
$ git remote rm リモートリポジトリ名
$ git remote rm origin
```

##- リモートリポジトリを一覧表示
```
$ git remote
$ git remote -v
```

##- リモートリポジトリ名を変更
```
$ git remote rename 旧リモートリポジトリ名 新リモートリポジトリ名
```

##- リモートリポジトリへ送信
```
$ git push origin ブランチ名
$ git push origin master
```

- 同時に上流ブランチとして設定

```
$ git push -u origin ブランチ名
```

##- 上流ブランチの設定状況を確認
```
$ git branch -vv
```

##- リモートリポジトリを含む全てのブランチを一覧表示
```
$ git branch -a
```

##- リモートリポジトリを取得
```
$ git clone git@github.com:ユーザ名/リポジトリ名.git
```

##- リモートリポジトリの別ブランチに切り替える（ローカルリポジトリにブランチ作成）
```
$ git checkout -b ブランチ名 リモートリポジトリ名/ブランチ名
$ git checkout -b fix-A origin/fix-A
```

##- 最新のリモートリポジトリのブランチを取得（リモートリポジトリからローカルリポジトリを更新）
```
$ git pull リモートリポジトリ名 ブランチ名
$ git pull origin master
$ git pull origin fix-A
```

- pull（fetch&merge）

```
$ git fetch リモートリポジトリ名

$ git fetch origin
$ git checkout master
$ git merge origin/master
```