Gitコマンドチートシート

下のチートシートを自分なりにまとめ直したもの
https://github.github.com/training-kit/downloads/ja/github-git-cheat-sheet/

### Gitのインストール

[GitHub Desktop](https://desktop.github.com/)

[Git コマンドライン](https://git-scm.com/downloads)

### Gitの用語

ワークツリー -> ステージング -> ローカルブランチ -> リモートブランチ
HEAD　現在のブランチの最新のコミット
HEAD^ HEADの一つ前のコミット
HEAD~ HEADの一つ前のコミット　^とは微妙に違う
参考：[【やっとわかった！】gitのHEAD^とHEAD~の違い](https://qiita.com/chihiro/items/d551c14cb9764454e0b9)

### ツールの設定

```sh
// 設定されているあなたの名前を確認します
$ git config user.name
// コミット操作に付加されるあなたの名前を設定します
$ git config --global user.name "{name}"
// コミット操作に付加されるあなたのメールアドレスを設定します
$ git config --global user.email "{email}"
```

### リポジトリの作成

```sh
// カレントディレクトリか指定したディレクトリにローカルリポジトリを作成します
$ git init ({directory})
// プロジェクトとすべてのバージョン履歴を指定したディレクトリにダウンロードします
$ git clone {url} ({directory})
```

### 変更の作成

```sh
// コミット可能なすべての新規または変更のあるファイルを一覧で表示します
$ git status ({file or directory})
// ファイルの変更や削除をステージングに追加します
$ git add {file}
$ git add -A  // 全てのディレクトリの新規・変更・削除されたファイルを追加
$ git add -u  // 全てのディレクトリの変更・削除されたファイルを追加
$ git add .   // カレントフォルダ以下の新規・変更・削除されたファイルを追加
// ワークツリーとステージングの差分を表示します
$ git diff
// ワークツリーと最新コミットの差分を表示します
$ git diff HEAD
// ステージングと最新コミットの差分を表示します
$ git diff --staged
// ファイルをステージングから外しますが、その内容は保持します
// 削除したファイルは指定出来ません
$ git reset (--mixed) {file}
// ファイルのスナップショットをバージョン履歴内に恒久的に記録します
$ git commit -m "{message}"
$ git commit -am "{message}" // 変更・削除をadd commit
// 直前のコミットメッセージを修正
$ git commit --amend -m "{message}"
// コミットを取り消しますが、ファイルの内容は保持し、ステージングに残ります
$ git reset -soft HEAD^
```

### 変更の整理

```sh
// 現在のリポジトリ上のすべてのローカルブランチを一覧で表示します
$ git branch
// 新規ブランチを作成し切り替えを行い、作業ディレクトリを更新します
$ git checkout -b {branch}
// リモートリポジトリのブランチをチェックアウトする
$ git checkout -b {branch} {remote}/{branch}
// 指定されたブランチの履歴を現在のブランチに統合します
$ git merge {branch}
$ git merge --no-ff {branch} //確実にマージコミットを作る場合
// 指定されたブランチを削除します
$ git branch -d {branch}
// ブランチにアップストリームを設定します
$ git branch -u {remote}/{branch}
```

### ファイル名の整理

```sh
// 作業ディレクトリからファイルを削除し、削除をステージします
$ git rm {file}
// バージョン管理からファイルを削除して、ローカルのファイルは保持します
$ git rm --cached {file}
// ファイル名を変更し、コミットします
$ git mv {file-original} {file-renamed}
```

### .gitignore

```conf
nonoe
.gitignore
*.log
build/
temp-*
```

```sh
// プロジェクト内のすべての除外されたファイルを一覧で表示します
$ git ls-files --others --ignored --exclude-standard
```

### 変更の退避

```sh
// すべての変更のあるトラックされているファイルを一時的に保存します
$ git stash
// 直近に一時保存されたファイルを復旧します
$ git stash pop
// すべての一時保存された変更セットを一覧で表示します
$ git stash list
// 直近に一時保存された変更セットを破棄します
$ git stash drop
```

### 履歴の確認

```sh
// 現在のブランチのバージョン履歴を一覧で表示します
$ git log
// 名前の変更を含む指定したファイルのバージョン履歴の一覧を表示します
$ git log --follow {file}
// ２つのブランチ間の差分を表示します
$ git diff {branch} {branch}
// 指定されたコミットのメタ情報と変更内容を出力します
$ git show {commit}
```

### コミットの修正

```sh
// {commit}以降すべてのコミットを取り消し、ローカルでは変更を保持し、ステージングには残します
$ git reset --soft {commit}
// {commit}以降すべてのコミットを取り消し、ローカルでは変更を保持します
$ git reset {commit}
// 指定されたコミットに戻り、それ以降のすべての変更を破棄します
$ git reset --hard {commit}
// 指定されたコミットを打ち消すコミットを追加します
$ git revert {commit}
$ git revert {commit} -n // 打ち消すソースコードを作成するがコミットはしない
$ git revert -m {1or2} {commit} // マージを取り消す
// コミットの変更、コメントの修正、コミットの削除などを対話形式で操作します
$ git rebase -i {commit}
```

### 変更の同期

```sh
// リモートリポジトリを設定します
$ git remote add origin {url}
// リモートブランチからすべての履歴をダウンロードします
$ git fetch {remote}
// リモートブランチを現在のローカルブランチに統合します
$ git merge {remote}/{branch}
// リモートブランチの履歴をダウンロードし、ローカルブランチに変更を統合します
$ git pull
$ git pull --rebase // localコミットを一時退避してからffでpullしてHEADからlocalコミットを反映(rebase)する場合
// すべてのローカルブランチのコミットをリモートブランチにアップロードします
$ git push {remote} {branch}
// アップストリームを設定する
$ git push -u {remote} {branch}
```