Gitコマンド

# add
コミット対象ファイルをインデックスに登録するためのコマンドです。
- ファイル
  `git add [file1] [file2] ...`

- フォルダ
  `git add [dir]` 
- 現在フォルダ
  `git add .` 

# branch
- 新規作成
  `git branch <name>`
  1. 新規と追跡(トラッキングブランチ)
     - `git branch development origin∕development`  
  2. 追跡設定(トラッキングブランチ)<br>
     - `git branch -u origin∕development development`
     - `git branch --track development origin∕development`
- 削除
  - `git branch -D develop`:ローカル
  - `git push origin --delete feature/XXXXX`：リモートrepository
- 変更
  - `git branch -m <new branchname>`
- 確認
  1. 全て
   `git branch -a`
  2. local
   `git branch`
  3. remotes
   `git branch -r`
  4. マージ済み
   `git branch --merged`
  5. 詳細表示
   `git branch -v`
- 追跡指定
  現在チェックアウトしているブランチが、指定したリモートブランチを追跡するようにする。
  - `git branch -u <upstream>`
  - `git branch -u <upstream> <branchname>`
  - `git branch --unset-upstream <branchname>`
- Pushローカル
  - `git push origin newBranch`

- ローカルブランチとリモート
  - `git branch --set-upstream-to origin/newBranch`

# checkout
- 変更取り消し
  1. ファイル指定
   `git checkout <filename>`
  2. 全て
   `git checkout .`
- 追跡
  `git checkout -b development origin∕development`

# clean
Git による管理されていないファイルを、作業ツリーから削除します。
`git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <path>…​`
- 削除
  `git clean`

# clone
リモートリポジトリをローカルリポジトリに複製（コピー）するためのコマンド
です。

`git clone <url>`
- プロジェクト名指定
  `git clone https://github.com/kitaaaa-kitsune/training <projectname>`

# commit
インデックスにあるファイルの変更内容を「コミット」するためのコマンドです。

- コミット
  `git commit -m "<message>"`
- コミット取消soft
  `git reset --soft HEAD^`:add残す
- コミット取消hard
  `git reset --hard HEAD^`
- コミット取消mixed（よく使われている）
  `git reset --mixed HEAD^` or `git reset HEAD^` 
- コミットのコメントを修正
  `git commit --amend`
  
# diff
「ワーキングディレクトリ」と「インデックス」の差分を表示するためのコマンドです。
- pull前にリモートとの変更点
  `git diff HEAD..リモート名/ブランチ名`
- push前にリモートとの変更点
  `git diff リモート名/ブランチ名..HEAD`
- add前に変更点
  `git diff`
- add後に変更点
  `git diff --cached`
- コミットした変更点
  `git diff HEAD^`
- コミット同士
  `git diff 変更前のSHA..変更後のSHA`
- ブランチ同士
  `git diff ブランチA..ブランチB`
- ファイルの変更点
  `git diff -- 対象のファイルパス`
- 別ファイル同士の比較
  `git diff -- ファイルパスA ファイルパスB`
- ファイル名だけ表示
  `git diff --name-only`

## fetch
リモートリポジトリの情報をローカルリポジトリに反映するためのコマンドです。

## init
リポジトリを作成するためのコマンドです。

## log
- 全てログ
  `git log `
- 特定ブランチ
  `git log --first-parent <ブランチ名>`
- 特定の期間
  1. 指定した日付以降のコミットログを表示する
   `git log --since 日付`
  2. 指定した日付以前のコミットログを表示する
   `git log --until 日付`
  3. 日付1から日付2までの期間のコミットログを表示する
   `git log --since 2020/2/1 --until 2020/2/29`
- ユーザ
   `git log --author=ユーザーネーム`
- キーワード
   `git log --grep=commentキーワード`
- 逆順
  `git log --reverse`

# merge
特定のブランチやリビジョンを、現在のブランチに取り込むためのコマンドです。
- マージ
  `git merge origin/master`
  現在のブランチにリモートブランチ「origin/master」を取り込む

# pull
`git fetch`と`git merge`の２つをまとめて実行するコマンドです。
「--rebase」オプションを使うことで、「merge」の代わりに「rebase」を実行することができます。

`git pull origin master`

`git pull --rebase origin master`

# push
- push
  `git push origin master`
- pushと追跡
次回から`git push`でリモートリポジトリにプッシュ
  `git push -u origin master`

# rebase
マージと同じように、ほかのブランチのリビジョンを取り込むコマンドです。

# remote
ローカルリポジトリで指定するリモートリポジトリの追加や削除をおこなうためのコマンドです。

# reset
コミットやインデックス登録をリセットするためのコマンドです。
インデックスに登録したファイルをリセット（登録前に戻す）しています。

# status
追跡確認 `git status -sb`
オプション

- `-s --short` : ショートフォーマットで出力します。
- `-b --branch` : ブランチと追跡情報を表示します。
参考：https://tracpath.com/docs/git-status/

# reflog
現在のHEAD位置および、過去のコミットのHEADでの表記を一覧で参照できるコマンド

- HEADの履歴表示`git reflog`
  1. `HEAD`:現在作業中のブランチ
  1. `HEAD -> master`:現在作業中のブランチがmasterブランチと同じ
  1. `HEAD@{0}`:0番目のHEAD＝現在作業中のブランチ
  1. `HEAD@{1}`:1つ前のコミット（現在作業中のブランチから１つ遡る）
  1. `HEAD@{n}`:n個前のコミット（現在作業中のブランチからn個遡る）
- HEAD移動
  1. `HEAD~`:~の数がn個前になる。例は「HEAD@{1}」と同じ。
  1. `HEAD^`:^の数がn個前になる
  1. `@^`:^の数がn個前になる
  1. `@~`:~の数がn個前になる

# name-rev
ハッシュからブランチ名を確認
`git name-rev ce2f63d77ca0049f04bf5466bb240d59e8fbcd9f`

# 参考
- https://b.hatena.ne.jp/entry/s/yu8mada.com/2018/08/11/how-to-confirm-and-set-up-tracking-branches-in-git/
- https://kitsune.blog/git-command