Git チートシート

# gitチートシート

#### ここではgitに関するチートシートを記載する。
***
## git configコマンド　　～gitの設定をする～
```
git config --global <設定項目名> <設定値>
例) git config --global user.name foo   
```
`--globalオプションを付与することで、ホームディレクトリの.gitconfigという設定ファイルに設定が保存されていく。`  
`例ではユーザ名をfooに変更した。`
<br>
```
git config --list
```
`git設定値の一覧を確認する。`
<br>
```
git config --global --unset <設定項目名> 
```
`「設定項目名」の設定を削除する。`
<br>
***
## git initコマンド　　～ローカルリポジトリを作成する～
```
cd <プロジェクト>
git init
```
`git initコマンドを実行することで、そのディレクトリにローカルリポジトリが作成される。`
<br>
***
## git statusコマンド　　～ローカルリポジトリの状況を確認する～
```
git status
```
<br>

***

## git addコマンド　　～ステージングエリアに登録する～
```
(1) git add .
(2) git add <ディレクトリ名>
(3) git add <ファイル名>
```
`(1) カレントディレクトリ配下のすべてのファイルを登録する。`  
`(2) <ディレクトリ>配下のすべてのファイルを登録する。`  
`(3) <ファイル>を登録する。 `

※ステージングエリアとは、コミットするファイルを登録する場所のことである。  
※なお、(3)については、git add <ファイル1> <ファイル2> とスペース区切りにすることで、指定の複数ファイルを登録することができる。     
<br>
***
## git diffコマンド　　～差分を確認する～
```
(1) git diff
(2) git diff --cached
(3) git diff <他のブランチ名>
```
`(1) ワークツリーとステージングエリアの差分を確認する。`  
`(2) ステージングエリアとGitディレクトリ(前回のコミット)の差分を確認する。`  
`(3)指定したブランチと現在のブランチの差分を表示する。`

<br>

***

## git commitコマンド　　～ステージングエリアからコミットする～
```
(1) git commit
(2) git commit -m "コミットメッセージ"
```
`(1) コマンド実行後に設定されているエディタでコミットメッセージを入力、保存することでコミットできる。`  
`(2) コミットメッセージが1行の場合は-mオプションを付与することで、その場でメッセージを入力しつつコミットすることが可能`
※<span style="color: red; ">コミットされるのはその時点でのファイルの状態。</span>
　<span style="color: red; ">ステージングエリアへの登録後に行った変更は含まれない。含めたい場合は、再度git addコマンドを実行する必要あり。</span>
<br>

***
## git checkoutコマンド　　～多機能コマンド～
**①ワークツリーの変更を取り消す**
```
git checkout -- <ファイル名>
git restore <ファイル名>  <-は上と同義
```
`ワークツリーで変更した分を取り消す。`  
`厳密にいうと、最後にコミットした状態ではなく、ステージングエリアの状態に戻すコマンドである。`  
`ステージングエリアにファイルの状態が登録されたままになっていると想定通りの動作にならないため、後述のgit resetコマンドを使用する。`

<br>

**②ブランチをチェックアウト(変更)する**
```
(1) git checkout <ブランチ名>
(2) git checkout -b <ブランチ名>
```
`(1) 操作ブランチを変更する。`  
`(2) <ブランチ名>のブランチを作成しつつ、そのブランチにHEADを変更する。`

***
## git resetコマンド　　～ステージングエリアへの登録の取り下げ～
```
git reset <ファイル名>
```
`ステージングエリアに登録されているものを取り下げる。`
`ファイルの内容には影響はない。`
<br>

***


## git rmコマンド　　～ファイル、ディレクトリの削除～
```
(1) git rm <ファイル名>
(2) git rm -r <ディレクトリ名>
```
`git管理下のファイルおよびディレクトリを削除しつつステージングエリアに登録します。`  
`(1): ファイルの削除　　(2) ディレクトリの削除`  
`このあとにコミットすると、git管理下から削除できる。`
※<span style="color: red; ">ただエクスプローラ等でファイルを削除しても、ステージングエリアには登録されないため、注意</span>
<br>

***
## git logコマンド　　～コミット履歴を確認する～
```
(1)git log
(2)git log -p
```
`(1) コミット履歴を確認する。`
`(2) コミット履歴(差分付き)を確認する。`

<br>

## git branchコマンド　　～ブランチに関するコマンド～
①ブランチの作成およびHEADの確認
```
(1) git branch <ブランチ名>
(2) git branch
```
`(1) ブランチを作成する。※分岐元は現在のHEAD`  
`(2) 使用中のブランチを確認する。`  
※HEAD: 現在作業しているブランチ  
<br>

②ブランチの削除
```
(1) git branch --delete <ブランチ名>
    git branch -d <ブランチ名>  ↑と同義
(2) git branch -D <ブランチ名>
```
`(1) マージ済みのブランチを削除する。（ローカルリポジトリ）`  
`(2) マージ状況に関わらずブランチを削除する。(ローカルリポジトリ)`

<br>

## git pushコマンド　　～ローカルの内容をリモートに反映させる～
```
git push <リモートリポジトリ名> <ローカルブランチ名>
```
`特別、リポジトリ名を変更していない場合はリモートリポジトリ名は「origin」`  
`ローカルで作ったブランチも当コマンドを実行することでリモートに反映させることができる。`

<br>

## git pull, git fetchコマンド　　～リモートの内容をローカルに取得する～
```
(1) git pull <リモートリポジトリ名> <リモートブランチ名>
(2) git fetch <リモートリポジトリ名> 
```
`(1) ローカルのHEADにリモートの内容で更新する。`  
`(2) ローカルリポジトリにリモートリポジトリの内容を取り込む。`  
※<span style="color: red; ">プル: ワークツリーにまで影響がある フェッチ: ローカルリポジトリに取り込むだけで、ワークツリーに変更はない。
</span>  
<span style="color: red; ">プル=フェッチ+マージ</span>

<br>

## git mergeコマンド　　～変更を取り込む～
```
git merge <取得したいブランチ>
```


<br>
<br>
<br>
<br>
<br>

***
# -番外-  
## .gitignoreファイル　　～git管理をしないファイル、ディレクトリの登録～
「.gitignoreファイル」記載内容
```
subDirectory/file1.md
target/
*.log
```
`1行目: subDirectory直下のfile1.mdファイルをgit管理下から除外する。`
`2行目: target配下のすべてをgit管理下から除外する。`
`3行目: 直下の.log拡張子ファイルをすべてgit管理下から除外する。`