emahiro/b.log

Drastically Repeat Yourself !!!!

Gitでよく使うコマンド・設定 ※随時更新

なんとなく使っていた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 コマンドで外部リポジトリを取りこむ

ema-hiro.hatenablog.com

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 を完了させます。