[随時更新]Gitコマンドチートシート

## PC及びターミナルの環境
```
MacBookPro(13-inch, M1, 2020)
チップ：Apple M1
使用アプリ：ターミナル(Mac標準搭載)
ターミナル環境：Homebrew
シェル：zsh
```

## このページの読み方
| 何の略語なのか
コマンドの意味
```shell:言語名
使い方の例
# 解説や補足など
```
---

## git init
｜initialize
リポジトリを新規作成 または既存のリポジトリを初期化する

## git remote
｜remote
リモートリポジトリとの関連付けをする
下記のようなサブコマンドが存在する
- git remote add
  現在のローカルリポジトリにリモートリポジトリを追加する
```shell:shell
git remote add origin https://hogehoge.com/fugafufa.git
# git remote add リモートリポジトリ名 リモートリポジトリのURL
```

- git remote rm
  ｜remove
  現在のリポジトリからリモートリポジトリを削除する
```shell:shell
git remote rm origin
# git remote rm リモートリポジトリ名
# rmはremoveとしてもOK
```

- git remote rename
  ｜rename
  リモートリポジトリの名前を変更する
```shell:shell
git remote rename origin neworigin
# git remote rename リモートリポジトリ名 変更後のリモートリポジトリ名(新しい名前)
```

- git remote show
  ｜show
  リモートリポジトリの情報を詳しく表示する
```shell:shell
git remote show origin
# git remote show リモートリポジトリ名
```

- git remote -v
  リモートリポジトリの名前と場所(URL)を表示する
```shell:shell
git remote -v
```

## git add
｜add
共有したいファイルを選択し、インデックス(ステージング領域)へ追加しコミットの対象とする
```shell:shell
git add hoge.rb
# git add ファイル名
```

## git commit
｜commitment
変更内容を確約(commitment)＝セーブする
```shell:shell
git commit -m 'First commit'
# git commit -m 'メッセージ内容'
```
※メッセージの内容を「コミットメッセージ」と呼び、コミットの内容を端的に明記できる(コミットメッセージはわかりやすいものが良い)

## git status
｜status
変更したファイルを把握する(新規作成したファイルや変更、削除したものなどを確認できる)

## git push
｜push
ファイルをリモートリポジトリへプッシュ(アップロード)する
```shell:shell
git push origin master
# git push リモートリポジトリ名 ブランチ名
```
masterブランチがリポジトリにないときは下記のようにする
```shell:shell
git push -u origin master
# git push -u リモートリポジトリ名 ブランチ名
```

## git pull
｜pull
ファイルをリモートリポジトリからプル(ダウンロード)する
```shell:shell
git pull origin master
# git pull リモートリポジトリ名 ブランチ名
```

## git fetch
｜fetch
リモートリポジトリ上のブランチ情報をローカルの追跡ブランチとして取得(fetch)・反映する

## git diff
｜difference
ワークツリー内のファイル変更内容(差分)を確認する

## git log
｜log
コミット時のログ(過去のコミット履歴)を確認する

## git show
｜show
過去、具体的にどのような内容のコミットをしたのかを確認(show)する
```shell:shell
git show 3fbede60cc38c548b5ed663ecf60da086983b5d8:test.txt
# git show コミットID:ファイル名
```

## git branch & git checkout
｜branch
｜checkout
ブランチを作成・一覧表示する
```shell:shell
git branch first-branch
# git branch ブランチ名
```
下記のようなオプションが存在する
- git branch -d
  ブランチを削除する
```shell:shell
git branch -d first-branch
#git branch -d 削除したいブランチ名
```

ブランチを作成と同時に切り替えるときには「checkout」を用いると便利
オプションと組み合わせて使うことが多い。
- git checkout -b
  ブランチの作成と移動(切替)を同時に行う
```shell:shell
git checkout -b first-branch
#git checkout -b ブランチ名
```

- git chekout -c
  現在のブランチを複製する
```shell:shell
git checkout -c hoge
# git checkout -c ブランチ名
```

## git merge
｜merge
現在いるブランチに別のブランチを統合(merge)する
```shell:shell
git merge first-branch
# git merge ブランチ名
```

## git switch
｜switch
ブランチを切り替える(switch)
checkoutコマンドは `git checkout .` で現在のワークツリーの修正を取り消しできるがswitchは切替専用
```shell:shell
git switch hoge
# git switch ブランチ名
# git checkout ブランチ名　と同義
```

## git stash
｜stash
現在の修正内容を一時的に退避(stash＝隠すの意味)させる
対比させた内容を戻す際は下記のようにする
```shell:shell
git stash pop
```

## git rebase
|re base
過去のコミット(base=土台)を修正(re=戻す)する
```shell:shell
git rebase -i HEAD~2
# git rebase -i 過去のコミット内容
# 対話形式で過去のコミットを修正することができ過去のコミットをまとめることもできる
```

## git revert
｜revert
対象のコミットで行われた変更を取り消す(revert=元に戻す)
間違って行ったコミットをプッシュした場合、打ち消す時などに使える
```shell:shell
git revert 3a8461e04c04ed94a64df5d2cd7adbe764a2b8d8
# git revert コミットID
```

## git rm
｜remove
gitの管理を行なっているファイルを削除する
※監視下に置かないファイルは「.gignore」へ入れる
```shell:shell
git rm --cache
# git上では対象ファイルを削除するがワークツリー上に残す際のコマンド
```

## git reset
｜reset
変更を取り消し(reset)てコードを前の状態に戻す
一度取り消してしまうと元に戻すことができないため扱いには注意が必要!!
```shell:shell
git reset --soft 3f1bacfbddecc843708714f2f0e27685a01b6bb3
# git reset --soft ID名(他のレベルも同様に記載)
```
削除レベルは下記の3段階
- git reset --soft
  コミットのみ取り消す(コミットは削除されるが、コミットに含まれていたコードの変更はインデックスに残された状態)
```shell:shell
git reset --soft HEAD^
# 直前のコミットはなくなり、修正内容はインデックスに置かれる状態
```
- git reset --mixed
  コミットとインデックスの変更を取り消す(コードの変更は作業ツリーに残された状態)
```shell:shell
git reset --mixed HEAD^
# 直前のコミットはなくなり、修正内容はワークツリーに置かれる状態
# git resetとgit reset --mixedは同じ挙動
```

- git reset --hard
  変更を全て取り消す
```shell:shell
git reset --hard HEAD^
# 直前のコミット記録と合わせて変更内容ごと削除される
```