gitコマンドまとめ

# はじめに
gitのコマンドを学んだので簡単にまとめていきます。

## 基本コマンド
まずはgitの基礎的なコマンドから書いていきます。

## git init
ローカルリポジトリの新規作成するコマンド

    $ git init

.gitディレクトリ作成される

.gitディレクトリの中身は以下のファイル
・リポジトリ
　　・圧縮ファイル
　　・ツーリーファイル
　　・コミットファイル

・インデックスファイル

・設定ファイル


## git clone
リポジトリのコピーを作成するコマンド

`git clone <リポジトリ名>(URL)`

    # hogeリポジトリのコピー作成
    $ git clone https://github.com/hoge/hoge.git

*他の人が作成したgithub上にあるプロジェクトから始める際に使う*

## git add
変更をステージに追加するコマンド

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

    # hogeファイルの変更をステージに追加する
    $ git add hoge

    #　変更全てをステージに追加
    $ git add .

## git commit
変更を記録する（コミットする）コマンド

    $ git commit

*-mオプションでコミットメッセージつけることができる*

    # "first commit"とメッセージつけてコミットする
    $ git commit -m "first commit"

## git status
現在の変更状態を確認するコマンド

    $ git status

ワークツリー、ステージの変更されたファイルを確認する際に使う


## git diff
変更差分を確認するコマンド

`git diff <ファイル名>`

    # git addする前の変更差分確認
    $ git diff

    # git addした後の変更差分確認
    $ git diff --staged

*git addする前＝ワークツリーとステージの変更差分*
*git addした後＝ステージとリポジトリの変更差分*

## git log
変更履歴を確認するコマンド

    $ git log
    #　　commitのハッシュ値（IDみたいなもの）、作成者、日時、コミットメッセージ表示される

|オプション|内容   |
|:-:|:-:|
| --oneline | 一行で表示する |
| -p | ファイルの変更差分を表示する |
| -n <コミット数>| 表示するコミット数を制限する|

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

    # hoge.htmlファイルの変更差分表示する
    $ git log -p hoge.html
 
    # 最新から三つ目までのコミット表示する
    $ git log -n 3

　## git rm
ファイルの記録を削除するコマンド

`git rm <ファイル名>`

    # hoge.htmlを削除する
    $ git rm hoge.html

    # ディレクトリ削除する場合 -rオプション
    $ git rm -r <ディレクトリ名>

    # ワークツリーにファイル残して、gitの記録から削除したい時
    $ git rm --cached <ファイル名>

## git mv
ファイルの移動を記録するコマンド

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

    # hoge.html→hoge２.htmlにファイル名変更する
    $ git mv hoge.html hoge2.html


## git push
リモートリポジトリ（GitHub）へ送信するコマンド

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

    $ git push origin master

*ローカルリポジトリの内容をリモートリポジトリに送ることをプッシュという*

## 変更を元に戻すコマンド
次はファイルやディレクトリなどの変更を元に戻すコマンド書いていきます。

## git checkout --
ファイルへの変更を取り消すコマンド

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

    # hoge.htmlの変更取り消す
    $ git checkout -- hoge.html

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

## git reset HEAD
ステージした変更を取り消すコマンド

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

    # ステージしたhoge.htmlの変更取り消す
    $ git reset HEAD hoge.html

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

*変更内容をステージから取り消すだけなのでワークツリーのファイルには影響がない*

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

    $ git commit --amend

*pushしたコミットはやり直しNG*

## GitHubとのやり取りするコマンド
次はGitHubとのやり取りに関するコマンドです。

## git remote add 
リモートリポジトリ（GitHub）を新規追加するコマンド

`git remote add origin <URL>`

    $ git remote add origin https://github.com/user/hoge.git

*originというショートカットを使うことで次からoriginという名前リモートリポジトリから習得したり、アップしたりできるようになる*

## git remote
リモートリポジトリの情報を表示するコマンド

    $ git remote

    # URLも表示する
    $ git remote -v

## git fetch
リモートから情報を取得するコマンド

`git fetch <リモート名>`

    # originの情報取得する（フェッチ）
    $ 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より詳しい情報を表示する*
・fetchとpushのURL
・リモートブランチ
・git pullの挙動
・git pushの挙動

## git remote rename
リモート名変更するコマンド

`git remote rename <旧リモート名> <新リモート名>`

    $ git remote rename hoge new_hoge

## git remote rm
リモート削除するコマンド

`git remote rm <リモート名>` 

    $ git remote rm hoge

## ブランチとマージのコマンド
次はブランチとマージに関するコマンドです。

## git branch
ブランチを新規追加する・一覧表示する・ブランチ名変更する・削除するコマンド

新規追加
`git branch <ブランチ名>`

    $ git branch hoge

一覧表示
`git branch`

    $ git branch
    
    # 全てのブランチを表示する
    $ git branch -a

ブランチ名変更
`git branch -m <ブランチ名>`

    $ git branch -m hoge

*現在自分が作業しているブランチの名前を変更する*

削除する
`git branch -d <ブランチ名>`

    $ git branch -d hoge 
    
    # 強制的に削除する
    $ git branch -D <ブランチ名>

## git checkout 
上でもgit checkout --　ファイルの変更を取り消すコマンドで出てきましたが
ここではブランチを切り替えるコマンドです。

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

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

## git merge
変更履歴をマージ(統合)するコマンド

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

    $ git merge origin/master

## git rebase
履歴を整えた形で変更を統合する

`git rebase <ブランチ名>`

    $ git rebase hoge

複数のコミットをやり直す時
 
    $ git rebase -i HEAD~3
    pick ge689je ファイル１修正
    pick oi2313o README修正
    pick 457ir09 ヘッダー修正

    # やり直したいコミットをeditに変更
    edit ge689je ファイル１修正
    pick oi2313o README修正
    pick 457ir09 ヘッダー修正

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

    # 次のコミットに進む (リベース完了)
    $ git rebase --continue

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

    $ git rebase -i HEAD~3
    pick ge689je ファイル１修正
    pick oi2313o README修正
    pick 457ir09 ヘッダー修正

    # ①457ir09のコミット　削除する
    # ②oi2313oを先に適応する
    pick oi2313o README修正
    edit ge689je ファイル１修正    

コミットをまとめる

    $ git rebase -i HEAD~3
    pick ge689je ファイル１修正
    pick oi2313o README修正
    pick 457ir09 ヘッダー修正

    # コミット一つにまとめる
    pick ge689je ファイル１修正
    squash oi2313o README修正
    squash 457ir09 ヘッダー修正

*squashを指定することで直前のコミットと一つにする*

## git pull --rebase
プルのリベース型
マージコミット残さずGitHubの内容だけ取得したい時に使う

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

    $ git pull --rebase origin master

## スタッシュのコマンド
最後にスタッシュのコマンドについて書いていきます。

## git stash
作業を一時避難するコマンド

    $ git stash

## git stash list
避難している作業を確認するコマンド

    $ git stash list

 ## git stash apply
避難した作業を復元するコマンド

    $ git stash apply

    # ステージの状況も復元する
    $ git stash apply --index

    # 特定の作業を復元する
    $ git stash apply stash@{1}

## git stash drop
避難した作業を削除するコマンド

    $ git stash drop

    # 特定の作業を削除する
    $ git stash drop stash@{1}
 
    # 全作業を削除する
    $ git stash clear

# おわりに
git, GitHubは必ず使うものなのでコマンドを繰り返し使い、しっかり覚えていきたいと思います。

   
もし間違いや改善点などありましたらご指摘お願いいたします。