Gitコマンドチートシート

# まえがき
**[DMM WEBCAMP Advent Calendar 2023](https://qiita.com/advent-calendar/2023/infratop)** 14日目記事です。

DWCメンター・卒業生が記事を投稿しておりますので、是非他の記事もご確認ください！

# 初めに
よく使うコマンドを厳選して載せています．
そのため，その他コマンドについては，`manコマンド`などを用いて各自で調べてください．

## git設定

| コマンド | 解説 | 補足 |
|:-|:-|:-|
| git config --list | gitの設定の確認 |  |
| git config --global user.name "{name}" | user名の設定 |   |
| git config --global user.email "{email}"  | emailの設定 |   |
| git config --global initdefaultBranch {ブランチ名} | デフォルトブランチ名の設定 |   |
| git config --global core.autocrlf {bool値} |改行コードの自動変換機能の設定| true: 自動変換ON <br>false: 自動変換OFF|
|git config --global color.ui {bool値}|コマンドの色を設定する|true: いい感じに色を出してくれる<br>false: 色を付けてくれない|

## プロジェクトの取得，作成
| コマンド | 解説 | 補足 |
|:-:|:-:|:-:|
| git init | ローカルリポジトリを作成 |
| git clone {URL} | リモートリポジトリからプロジェクトを取得 | URLはSSH，HTTPどちらでも可 |

## スナップショット操作
| コマンド | 解説 | 補足 |
|:-|:-|:-|
| git add {file...} | ファイルをステージング | 空白で区切り，複数選択可 |
| git add {file_path} | ファイルパスで指定したファイル群をステージング | `git add .`コマンド<br>カレントディレクトリのファイルすべてをステージングできる |
| git status | ワーキングツリーのステータスを確認する | オプション<br>`-s`: 簡潔に確認する|
| git diff {branch1} {branch2} | branch1とbranch2の差分確認 |   |
|git log|コミット履歴の確認||
| git commit | コミット履歴を作成する | 基本的に，`git commit -m "{コミットメッセージ}"`という形で実行する |
|git restore {file}|addされていない変更を取り消す|addされている変更も取り消す場合は，`--stagedオプション`を付け，実行する|
|git revert {commit}|指定したコミットと逆の内容をコミットする||
|git reset --soft {commit}|コミットを削除する|コミットだけ消える<br>HEAD^の指定をすると直前のコミットを削除できる|
|git reset --mixed {commit}|コミットとステージングを削除する|add, commitが消える|
|git reset --hard {commit}|コミット，ステージング，作業を削除する|全部消えます！<br>これを使う際には，プッシュ前のコミットに対してのみ，使うようにしましょう！|
|git reflog|HEADの動きの履歴確認|ミスってreset --hardしたときに，reset --hardで間違えたコミットまでreflogの履歴から戻ろう！<br>（変更内容をコミットしてなかったら結局，変更内容消えてるよ．．．）|
|git rm {file}|リポジトリからファイルを削除|ファイルを復元したい場合は，`git restore`を使う|
|git mv {file}|リポジトリ内のファイルを移動，名前変更||
|git blame {file}|ファイルの修正箇所のリビジョンと作成者を表示する|バットコード犯人捜しコマンド|
|git stash|作業ディレクトリとインデックスの状態を保存して，作業ディレクトリをHEADコミットに合わせる|通常，`git stash save "{message}"のように，メッセージ付きで変更を退避する|
|git stash -u|未追跡ファイルも含めて変更を退避||
|git stash list|退避した変更の一覧確認||
|git stash pop|最新の退避を現在のブランチに反映し，リストから削除||
|git stash apply '{list_num}'|指定された退避を現在のブランチに反映し，リストに残す|番号指定なしは，最新のものが対象|
|git stash show '{list_num}'|指定された退避との差分確認||
|git drop '{list_num}'|指定された退避を削除|番号指定なしは，最新のものが対象|
|git stash clear|すべての退避を削除||


## ブランチ操作
| コマンド | 解説 | 補足 |
|:-|:-|:-|
|git branch|ローカルブランチ確認|オプション解説<br>-r: リモートブランチ確認<br>-a: すべてのブランチ確認<br>-vv: 親ブランチを確認|
|git branch {new_branch_name}|新しいブランチの作成|-d: ブランチの削除<br>-m: ブランチ名変更|
|git switch {branch}|指定したブランチに移動|ブランチ移動にcheckoutは使うな！|
|git checkout {branch}|指定したブランチに移動|-b: 新しいブランチを作成してそのブランチに移動|
|git checkout {commit}|リポジトリの状態を指定したコミットの状態にする|ただし，detached HEAD状態になるり，ブランチから切り離される．<br>そのため，新しいコミットを作成したい場合は，`git checkout -b {new_branch} {commit}`を実行する|
|git merge {branch}|現在のブランチに，指定したブランチの内容を取り込むというコミットを作成する|ブランチの構造に気を付けよう！|
|git rebase {base_branch}|指定ブランチの変更内容を現在のブランチに反映する|指定したブランチに現在のブランチの内容を反映させたい場合には，<br>`git switch {base_branch}`<br>`git merge {rebase_branch}`|

## リモート操作
| コマンド | 解説 | 補足 |
|:-|:-|:-|
|git fetch {remote_branch}|リモートリポジトリの指定ブランチの情報をダウンロード||
|git fetch --all|リモートのすべての情報を取得||
|git pull {remote_name} {remote_branch}|指定したリモートリポジトリの情報を現在のブランチにマージ|fetchとmergeが同時に実行されるため，実行には注意！<br>gitの動作がよくわかっていないときは，素直にfetch, mergeを分けて使おう！|
|git push {remote_name} {branch}|指定したブランチの情報をリモートリポジトリにアップする|-uオプションを付けると，次から同じブランチにpushするときは，git pushだけでよくなる|
|git remote add {new_remote_name} {remote_URL}|リモートリポジトリに名前を付ける|addの部分をrename, removeにすると，それぞれ名前の変更，削除を実行できる|
|git remote -v|リモートの設定の確認||