なんとなく使っていたgitコマンドたちを最近commitやmergeをする前に意図を持って使うようになったのでよく使ってるコマンドを整理しました。
※ ちょくちょく更新していきます。
Commands
remoteのmasterを取ってくる時
作業ブランチからmasterにcheckoutして最新の状態に戻すときに、追跡されてないファイルとかを削除してブランチの状態をきれいにしてからmergeします。
追跡されてないファイルを確認する
git clean -n
追跡されてないファイルを削除する
git clean -f
追跡されてないファイルとディレクトリを削除する
git clean -fd
これをするとvendorディレクトリなどの依存ライブラリを管理しているディレクトリも削除してしまうので、改めて入れ直す必要があります。
pullする
癖でmaster出し git pull
をいつも使ってましたが、最近は予め fetch origin master
してから merge origin master
するようにしてます。
remoteのmasterの状態とlocalのmasterの状態が異なってしまうときにどのファイルでコンフリクトが起きそうなのかを予めlocalにmergeする前にわかっておくと、誰がいつなんで変更したファイルなのかを知ることができます。
resolve conflict
というcommitメッセージを極力残さないように注意するようになりました。
remoteにpushするとき
差分を確認する
コードを変更したらまず意図した差分かを確認します。
git diff
これだけでHEADの状態とlocalの作業ブランチの状態を比較します。
ただ、具体的なコードレベルの差分よりも、commit前になったら差分があるファイル一覧だけ欲しい時があります。
git diff --name-status HEAD
これで差分があるファイル一覧を確認します。
新規ファイルを作成したりしたときは
git status
で意図したファイルが作成されているかをcommit前にかならず確認します。
indexに登録する
手癖で git add .
を使って一括でHEADに上げることをしていました。
ただ、これだとよくわからないファイルを上げてしまったり、予期してなかった変更を上げてしまうことが増えてしまって、レビュー時に指摘されてしまったりということが増えてきました。
そのため 一括で HEAD に登録する git add .
をやめました。
commitするときは diff --name-status HEAD
を確認したファイルをindex登録します。
この時できるだけ細かい粒度でaddするようにはしています。
※ めんどくさいと git add -A
でaddすることもあります、
最近知ったんですが、 -p
オプションなるものがあるらしく対話形式で厳密にファイルを index に登録していくことができるらしいです。
git add -p . # diffが表示 Stage this hunk [y,n,q,a,d,e,?]? # yを選ぶと index に登録される。
a
を選ぶと残りを全てindexに登録してくれます。
再度差分を確認する。
add し終えたら再度差分を確認します。
git diff --cached
commitする
commitメッセージ注意するくらいかな。最近はGUIでsquash and mergeすることが増えてきたのでとりあえず適当に書いておいてあとで直せばいいや、くらいのノリでいますが。
add + commitを一度に行う
git commit -A
commit メッセージを書くときにどのファイルがindexに登録されているかもすぐに分かって良さみがある。最近一番良く使う。
既存の変更されたファイルのみ add する。
git add -u
新規で作成されたファイルは含まないので ignore 忘れの vendor などを間違って commit するのを防止できる。
git subtree コマンドで外部リポジトリを取りこむ
author を再設定する
PC を変更した場合に git の user.name や user.email を設定しないまま commit しちゃうと、以下のような「設定してね!」というメッセージが表示される。
You can suppress this message by setting them explicitly: git config --global user.name "Your Name" git config --global user.email you@example.com
このメッセージ表示後に commit した変更は上記の設定で追加したユーザー情報が利用されますが、設定する前の commit までは Unkown ユーザーになってしまう。
こういうケースでは git commit --amend --reset-author
を使ってユーザー設定を再設定した後に commit を上書きする。
git コマンドにエイリアスを貼る
毎回 git checkout や git status を叩くのは面倒くさいので alias を貼って短縮化します。
設定は ~/.gitconfig
に以下のディレクティブを追加して alias
を貼りたいコマンドと正規の git コマンドを追加します。
# ~/.gitconfig [alias] st = status -s df = diff b = branch co = checkout
エイリアスは僕が普段使ってるものを追加してます。
コミットメッセージを編集する
直前のコミットメッセージを編集する
git commit --amend
2つ以上前のコミットメッセージを編集する
N個前のコミットメッセージを編集したいとします。
git rebase -i HEAD~N # コミットメッセージを編集したいコミットまで遡ります。
pick xxxxx // このコミットメッセージを変えたい時 pick yyyyy pick zzzzz
edit xxxxx // edit に変更する pick yyyyy pick zzzzz
この状態で保存して git commit --amend
を選択して該当コミットのコミットメッセージを変更する。その後は git rebase --continue
を選択して rebase を完了させます。