よく忘れる！頻出 git command quick reference

Gitのコマンドをひとまとめに紹介しているサイトがあまり見当たらないので、頻繁に使用するコマンドを纏めてみました。
都度都度追加していきます。

## レポジトリのURLの確認
`git remote -v`

## ブランチの切り替え
`git branch [ブランチ名]`
パラメータで指定したブランチ名でブランチを作成する。
PUSHしないとこの時に作成したブランチはリモートレポジトリに反映されない。
そのため、この方法でブランチを作成した後は一旦チェックアウトし、プッシュをする必要がある。

```bash:例
git branch feature/hogehoge_20XXXXXX
git checkout feature/hogehoge_20XXXXXX
git push origin feature/hogehoge_20XXXXXX
```

`git checkout -b [新ブランチ名]`
こちらはブランチのチェックアウトとブランチの作成を同時に行う。
もちろんPUSHしないとリモートレポジトリには反映されない。


## ブランチのチェックアウト
`git checkout [ブランチ名]`
`git switch [ブランチ名]`

パラメータで指定したブランチをチェックアウトする。switchも同じ。

## ブランチ名の変更
`git branch -m [元のブランチ名] [新しいブランチ名]`
既存のブランチ名を変更する。

> [Git でブランチ名を変更する](http://easyramble.com/modify-git-branch-name.html)

## ブランチの削除（ローカル）
`git branch -d [ブランチ名]`
パラメータで指定したローカルに保持しているブランチを削除する。
このローカルブランチにリモートレポジトリにPUSHしていないものがある場合は削除に失敗する。

`git branch -D [ブランチ名]`
パラメータで指定したローカルに保持しているブランチ（ローカルブランチ）を削除する。
上記の小文字dとは違い、未コミットのものがあろうが強制的に削除する。

### [tips] リモートレポジトリから削除されたブランチをローカルから削除する
```bash
$ git pull --prune; git branch --merged | grep '-' | xargs git branch -d ;
```

## ブランチのマージ
`git merge [ソースとなるブランチ]`
マージしたいブランチをチェックアウトした状態で行う。

```bash:masterブランチにdevelopブランチをマージしたい場合
git checkout develop
git pull
git checkout master
git merge develop
```

## チェリーピック
`git cherry-pick [コミットハッシュ]`

マージしたいブランチに切り替えた後に、チェリーピックしたいコミットのハッシュをパラメータに付与。

## 他ブランチからファイルをチェックアウトする
`git checkout [ブランチ名] -- [ファイルパス]`

## 特定のコミットからファイルをチェックアウトする
`git checkout [コミットハッシュ] -- [ファイルパス]`

## 作業の取り消し
`git reset --soft HEAD^`
作業中のブランチのHEADの位置をずらすことで、作業ブランチの最新のコミットを取り消す。
厳密には正しい使い方ではないが、主に自分しか使っていないブランチのPUSHしていないコミットの取り消しで使っている。

`git reset`
git Add コマンドでステージングに追加したものをすべて取り消す。

`git revert [コミットハッシュ]`
コミット済みの変更をコミットする前の状態に戻す。

`git checkout .`
`git checkout [ファイルパス]` or `git restore [ファイルパス]`
ローカルの変更を最後にpullした状態まで戻す。
`.` を指定した場合は変更したもの全てが対象になり、ファイルパスを指定した場合は、そのファイルだけ元に戻す。
git addしていない新規ファイルは対象外となるので、`git status` をすると `untracked files` に残っているのが分かる。

## 作業内容を隠す git stash
`git stash`
作業内容を隠す。

`git stash list`
stashしているものをリストとして表示する。

`git stash drop`
stashしている直近1件を破棄する。

`git stash show stash@{0}`
直近stashで格納したファイルのリストを表示する。

> [色々な git stash](http://qiita.com/akasakas/items/768c0b563b96f8a9be9d)

## 作業内容の把握
`git log`
コミットログを表示する。

`git log --stat`
コミットログを表示する際に、修正されたファイルのリストを表示させる。

`git log -p`
コミットされたログと修正内容を表示する。
コマンドの最後にファイルパスを追加して実行すると、そのファイルの修正内容だけ表示する。
直近どんな修正が入ったのかなーって見たい時に。

`git diff`
ステージにあげていないファイルの変更内容を確認する。

`git diff --cached`
ステージ(git addしたもの)にあげているファイルの差分を表示する。

`git diff [branch]`
現在のブランチとパラメータで指定したブランチとの差分を表示する。

## 基本作業
### ファイルの追加
`git add [ファイル名]`
ステージングにファイルを追加する。

`git add -u`
レポジトリで管理している変更済みのファイルをすべてステージングに追加する。

`git add .`
カレントディレクトリのファイル・配下にあるディレクトリも含めて全てステージングに追加する。

`git add -p`
対話形式で変更分をファイルの中のブロック単位でステージングに移動する。
#### 対話時のキーの対応
- y `stage this hunk`<br />ブロックをステージングに移動する
- n `do not stage this hunk`<br />ブロックをステージングに移動しない
- q - `quit; do not stage this hunk or any of the remaining ones`<br />対話形式でのgit add を終了する
- a - `stage this hunk and all later hunks in the file`<br />以降の変更分をすべてステージングに移動する
- d - `do not stage this hunk or any of the later hunks in the file`<br />以降の変更分はステージングに移動しない
- e - `manually edit the current hunk`<br />変更分を編集した上でステージングに移動する
- ? - `print help`<br />ヘルプの表示

### ファイルの削除
`git rm [ファイル名]`
レポジトリからファイルを削除する。

`git rm -f [ファイル名]`
レポジトリに登録しているが、gitコマンドを使わずに削除してししまうと　`git rm [ファイル名]` では削除できないので、 `-f` オプションを付けて強制的に削除する

> [gitの管理対象から特定のファイル、ディレクトリを削除する](http://qiita.com/ytkt/items/a2afd6be8e4f06c1ea25)

### ファイル・ディレクトリの移動
`git mv [移動元] [移動先]`
ファイルやディレクトリを移動する。

### 変更履歴の保存
`git commit`
ステージングにあげたファイルをコミットする。
SVNとは異なり、`git push`を行うまではリモートレポジトリには反映されない。

### リモートレポジトリの変更を取り込む
`git fetch`
リモートレポジトリから変更の情報を取り込む。（ローカルに変更は反映しない）

`git pull`
リモートレポジトリからローカルに変更をダウンロードしてローカルに反映する。

> [基本操作 | 逆引きGit | サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ](http://www.backlog.jp/git-guide/reference/basic.html)