Git Command Memo

# 1.はじめに
本記事は実務を行う上でGit初心者だった自分が忘れたときに思考の整理やcommandを見返すメモ帳のようなものです。


# 2.[master]ブランチと[origin/master]の違い
⭕️ [master]ブランチ

    →（特に設定いじらなければ）ローカルブランチの中心。他のローカルブランチの枝は最終的に
    [master]ブランチに導かれる

⭕️[origin/master]ブランチ

    →ローカルにある[master]とリモート（一般的にGithubサイト)と繋がっているのが
    [origin/master]ブランチ。リモートの情報に紐づいている。
    
    →個人だけでgit管理する場合、リモートと[origin/master]は同じだと考えてよいと思う。
    
    →逆に複数人で管理する場合はいつ時点のリモートファイルと同期された[origin/master]か
    確認しないとわからないので、別物と考えた方がよい
    
    →基本ローカルの[master]ブランチでcommitし変更を保存後、リモート環境に変更内容を保存するため、
    pushし、[origin/master]ブランチに反映させる。

    →個人で使ってある程度git管理ができるようになってから、この記事をみるとorigin/masterが
    なぜ存在するのか、どういった時に効力を発揮するのかわかりやすく書いてある

### 参考記事
・【ざっくり分かるGit】originとorigin/masterとmasterの違い
https://qiita.com/kikuchiTakuya/items/196e59f7a4e3d2a75e20

# 3.各gitコマンドでよく使うオプション等まとめ

## git&nbsp;addのtips
⭕️更新したファイルのgit addをする際、
commit前にちゃんと想定通りに更新ができたか確認したい場合

    git add -p .

## git&nbsp;branchのtips関連
⭕️ローカルブランチ名を変更する

    git branch -m [古いブランチ名] [新しいブランチ名]
    ※なお、今いるローカルブランチ名を変えたいのならgit branch -m [新しいブランチ名]だけでOK

⭕️自分のいるブランチを確認
＋ローカルブランチと[origin/hogehoge]（いわゆるリモート追跡ブランチ）の一覧を表示させる

    git branch -a
    ※自分の場合はgbでalias登録してます

    
## git&nbsp;chekoutのtips関連
⭕️リモート追跡ブランチと同じ名前でローカルブランチを作成し、最新情報を引っ張ってくる　＋　当該ローカルブランチにcheckout

    git checkout -t origin/[ブランチ名]

⭕️今いるローカルブランチをコピペする＋コピペした当該ローカルブランチにcheckoutする

    git checkout -b [好きなブランチ名]

## git&nbsp;cherry-pickのtips関連
⭕️他ブランチの特定のコミットだけを今のローカルブランチに取り込みたい場合

    git cherry-pick [欲しいコミットのID]

## git&nbsp;commitのtips関連
⭕git add .した後で、コメントも1行で済ましたい場合

    git commit -m "コメント"

⭕ファイルの更新をするのみでコメントも1行で済ましたい場合（新規ファイルがない場合）
 
    git commit -am "コメント"

## git&nbsp;diffのtips関連
⭕️色付きでgit 差分を見る

    git diff --color-words [最新のcommit ID] [一個前のcommit ID]

⭕️色付きで最新のコミットの内容の内容をdiffで見せてくれる（よく使っている）

    git diff HEAD^ --color-words

⭕️変更があったファイル名とそのステータスをみせてくれる

    git diff HEAD^ --name-only

⭕️変更があったファイル名と変更量がざっくりとわかる

    git diff HEAD^ --stat

## git&nbsp;fetchのtips関連
⭕️すでにmerge等されていて削除されたリモート追跡ブランチを自動的に判別して削除してくれる

    git fetch --prune

## 【git&nbsp;fetch/&nbsp;git&nbsp;merge/&nbsp;git&nbsp;pull関連】
⭕️リモートにあるファイルからリモートと繋がっている
[origin/master]（いわゆるリモート追跡ブランチ）にデータを引っ張ってくる

    git fetch origin master
    ※git remote -vでpullとfetch対象のリモートレポジトリを確認できる

⭕️[origin/master]の内容とローカルにある[master]ブランチとの差分を確認する
    （個人開発の場合は基本不要）

    git diff origin/master
    
⭕️[origin/master]（いわゆるリモート追跡ブランチ）からローカルにある[master]ブランチに取り込む
    
    git merge　origin/master

⭕️いったん追跡ブランチで確認とかいらないから一気にローカルの[master]ブランチに取り込みたい場合

    git pull origin master

⭕️他のブランチもあってとにかくローカルにリモートブランチの情報を一気に取り込みたい
（個人ならいいがよくわかってない状態でこれをやるのはリスキー）
    
    git pull

## git&nbsp;logのtips関連
⭕️commit logの直近10個分までonelineで表示する

    git log --oneline -n 10

⭕️指定したファイルにかかる変更だけ表示してくれる

    git log --color-words -p [ファイル名]

⭕️編集者単位で

    git log --authors='hogehoge'

⭕️マージコミットを覗く

    git log --no-merges

## git&nbsp;mergeのtips関連
⭕️merge済みのローカルブランチを削除したい場合

    git merge -d [ブランチ名]
    ※mergeしてる、してないに関わらずローカルブランチを削除したい場合は -Dを-dの代わりにつける


## git&nbsp;pullのtips関連
⭕️現在いるブランチにかかるリモートブランチの情報だけローカルブランチに持ってきたい　且つ　逐一ブランチ名指定するのが面倒な場合

    git pull origin $(git rev-parse --abbrev-ref HEAD)
    →.bashrc等のaliasかgit config --global aliasとかに入れると便利。自分はgitと打つのもめんどいのでgpで上記のコマンドで打てるようにしている
    
    ※$(git rev-parse --abbrev-ref HEAD)　の解説
    git rev-parse はgitが内部で管理しているパラーメータ情報を取得するためのコマンド
    例　 git rev-parse master
       7e4657bb5187ce2958e627fc9611f4473eb5dfxx
    --abbrev-ref HEADは現在いるブランチ名を取得できる。
    つまり現在いるブランチ名を表す内部パラメーターをprev-parseで表示できる

⭕️特定のリモートブランチから特定のローカルブランチ単体にだけgit pullする

    git pull origin [指定リモートブランチ]:[指定ローカルブランチ]

## git&nbsp;pushのtips関連
⭕対象ブランチを[origin/hogehoge](いわゆるリモート追跡ブランチ）にpushしたいが
正しいリモート追跡ブランチ宛にpushできているかdry runする

    git branch -a
    →現在いるローカルブランチおよびpushしたいリモート追跡ブランチ名を確認
    
    git push origin [指定したブランチ] -n
    →dry-run。正しくpushできていそうか確認。-nの代わりに--dry-runでもOK

    git push origin [指定したブランチ]
    →本番push実施

    git status
    →現在の状態を確認。
    「your branch is up to date with 'origin/[指定したブランチ]'」と出ればOK

## git&nbsp;stashのtips関連
⭕️ローカルブランチで編集中のファイルがあって、
addやcommitしたくないがbranchを切り替えなきゃいけない場合

    git stash -u
    →untracked fileも含めて編集中ファイルを退避できる

⭕️一時退避したファイルをもとに戻したい場合

     git stash list
     →一時退避中のファイルを戻すために使うstash@[数字]を取得

     git stash apply stash@[数字]
     →一時退避したファイルを通常通りの状態にする（＝git stash -uする前の状態にする）