Gitの基本コマンド

##はじめに
これから実務に入るにあたって、コマンドを調べる際に効率的に調べられるようにまとめました。

##Gitでよく使うコマンド

###git clone

Gitリポジトリのコピー
ファイルと.gitディレクトリの両方がコピーされる。

```
$ git clone <リポジトリ名>
```

###git add
変更をステージに追加する
※ステージは一部のファイルを変更するために存在する

```
$ git add <ファイル名>
$ git add <ディレクトリ名>
$ git add .
```

###git commit
変更を記録する（コミット）
#####<わかりやすいコミットメッセージ>
1行目：変更内容の要約
2行目：空行
3行目：変更した理由

```
$ git commit
$ git commit -m "<メッセージ>"   //エディタ立ち上がらずに記録
$ git commit -v               //変更内容を確認できる
```

###git status
現在の変更状況を確認
①ワークツリーとステージの間で変更されたファイル
②ステージとリポジトリの間で変更されたファイル

```
$ git status
```

###git diff
変更差分を確認する

```
# git addする前の変更分
$ git diff
$ git diff <ファイル名>

# git addした後の変更分
git diff --staged
```

###git log
変更履歴を確認する

```
$ git log

#1行で表示する
$ git log --oneline

#ファイルの変更差分を表示する
$ git log -p index.html

#表示するコミット数を制限する
$ git log -n <コミット数>
```

###git rm
ファイルの削除を記録する

```
# ファイルごと削除
$ git rm <ファイル名> //ワークツリーとリポジトリのファイルの削除
$ git rm -r <ディレクトリ名>

#ファイルを残したいとき
$ git rm --cached <ファイル名> //リポジトリのファイルのみ削除
```

### git mv
ファイルの移動を記録する

```
$ git mv <旧ファイル><新ファイル>

# 以下のコマンドと同じ
$ mv <旧ファイル><新ファイル>
$ git rm <旧ファイル>
$ git add <新ファイル>
```

###git remote add 

リモートリポジトリ（GitHub）を新規追加する

```
#originというショートカットでurlのリモートリポジトリを登録
$ git remote add origin <GitHubのURL>
```

###git push
リモートリポジトリ(GitHub)へ送信する

```
$ git push <ブランチ名><リモート名>
$ git push origin master
```

###git config --global alias
コマンドにエイリアスをつける

```
$ git config --global alias.ci commit
$ git config --global alias.st status
$ git config --global alias.br branch
$ git config --global alias.co checkout
```

###git checkout
ファイルへの変更を取り消す

```
$ git checkout -- <ファイル名>
$ git checkout -- <ディレクトリ名>

# 全変更を取り消す
$ git checkout -- .
```

###git reset HEAD
ステージした変更を取り消す
※ワークツリーのファイルには影響しない（削除されない）

```
$ git reset HEAD <ファイル名>
$ git reset HEAD <ディレクトリ名>

#全変更を取り消す
$ git reset HEAD .
```

###git commit --amend
直前のコミットをやり直す

```
$ git commit --amend
```

###git remote
リモートの表示

```
$ git remote
#対応するリモートの表示
$ git remote -v
```

###git remote add
リモートリポジトリを新規追加する
※リモートリポジトリは複数登録可

```
$ git remote add <リモート名> <リモートURL>
```

###git fetch
リモートから情報を取得
リモートリポジトリからローカルリポジトリに情報を取ってくる
remotes/リモート/ブランチに保存

```
$ git fetch <リモート名>
$ git fetch origin
```

###git pull 
リモートから情報を取得してマージする
ワークツリーまで一度に反映する

```
$ git pull <リモート名> <ブランチ名>
$ git pull origin master

#上記コマンドは省略可能
$ git pull

#下記コマンドと同じ
$ git fetch origin master
$ git merge origin/master
```

###git remote show
リモートの詳細情報を表示する

```
$ git remote show <リモート名>
$ git remote show origin
```

###git remote rename
リモートを変更、削除する

```
#名前の変更
$ git remote rename <旧リモート名> <新リモート名>
$ git remote rename tutorial new_tutorial

#削除する
$ git remote rm <リモート名>
$ git remote rm new_tutorial
```

###git branch
ブランチの一覧を表示
ブランチを新規追加

```
#ブランチの一覧表示
$ git branch
$ git branch -a //全てのブランチの表示

#ブランチを新規追加
$ git branch <ブランチ名>
$ git branch feature
```

###git checkout
ブランチを切り替える

```
$ git checkout <既存ブランチ名>
$ git checkout feature

#ブランチを新規作成して切り替える
$ git checkout -b <新ブランチ名>
```

###git merge
変更履歴をマージ

```
$ git merge <ブランチ名>
$ git merge <リモート名/ブランチ名>
$ git merge origin/master
```

###git branch
ブランチを変更、削除する

```
#変更する
$ git branch -m <ブランチ名>
$ git branch -m new_branch

#削除する
$ git branch -d <ブランチ名>
$ git branch -d feature

#強制削除
$ git branch -D <ブランチ名>
```

###git rebase
リベースで履歴を整えた形で変更を統合する
GitHubにプッシュしたコミットをリベースするのはNG
git push -fはNG

```
$ git rebase <ブランチ名>
```

###git pull --rebase
プルのリベース型

```
$ git pull --rebase <リモート名> <ブランチ名>
$ git pull --rebase origin master
```

プルをリベース型に設定

```
$ git config --global pull.rebase true
#masterブランチでgit pullするときだけ
$ git config branch.master.rebase true
```

###git rebase -i 
複数のコミットをやり直す

```
$ git rebase -i <　コミットID>
$ git rebase -i HEAD~3

#やり直したいcommitをeditにする
edit gh21f6d ヘッダーの修正
pick 193054e ファイルの追加
pick 84gha0d READEME修正

#やり直したら実行する
$ git commit --amend

#次のコミットへ進む（リベース完了）
$ git rebase --continue
```

コミットを並び替える、削除する

```
$ git rebase -i HEAD~3

#コミットを削除する
pick 193054e ファイルの追加
pick 84gha0d READEME修正

#並び替えたい順に並び替える
pick 84gha0d READEME修正
pick 193054e ファイルの追加

#コミットをまとめる
pick gh21f6d ヘッダーの修正
squash 193054e ファイルの追加
squash 84gha0d READEME修正

#コミットの分割
pick gh21f6d ヘッダーの修正
pick 193054e ファイルの追加
edit 84gha0d READEME修正とindex修正

$ git reset HEAD^
$ git add README
$ git commit -m 'README修正'
$ git add index.html
$ git commit -m 'index.html修正'
$ git rebase --continue
```

###git tag
タグの作成

```
#注釈付きタグ
$ git tag -a [タグ名] -m "[メッセージ]"
$ git tag -a 20210730_01 -m "version 20210730_01"

#軽量版タグ
$ git tag [タグ名]
$ git tag 20210730_01

#後からタグ付けする
$ git tag [タグ名] [コミット名]
$ git tag 20210730_01 8a6cbc4

#タグのデータを表示する
$ git show [タグ名]
$ git show 20210730_01

#タグをリモートリポジトリに送信
$ git push [リモート名] [タグ名]
$ git push origin 20210730_01

#タグの一斉送信
$ git push origin --tags
```

###git stash
作業を一次避難する

```
$ git stash
$ git stash save

#避難した作業を確認
$ git stash list

#避難した作業を復元
$ git stash apply
#ステージの状況も復元
$ git stash apply --index

#特定の作業を復元
$ git stash apply [スタッシュ名]
$ git stash apply stash@{1}

#最新の作業を削除する
$ git stash drop

# 特定の作業を削除する
$ git stash drop [スタッシュ名]
$ git stash drop stash@{1}

#全作業を削除する
$ git stash clear
```

##参考リンク
https://www.udemy.com/course/unscared_git/