個人的に良く使うgitコマンド・設定まとめ

こんばんは。regtanです。最近、gitまとめエントリをよく目にするようになりました。というわけで、流れに乗って個人的に良く使うコマンドとか設定とかをまとめてご紹介します。エイリアスは省いています。

config

設定周りのお話。いちおうコマンドラインベースで書いてますがgitconfigに書けばそのまま使えます。

git config --global user.name your_name
git config --global user.email your_address

これはgitインストールした直後にする設定。それぞれコミット時に付与されるユーザ情報の設定。--globalをつけるとgitで管理するレポジトリ全てに同じ情報を設定。--globalを外すと自分のいま見ているレポジトリでのみ有効な設定になる。ちなみにこれをしていないとcommit時に警告がでる。

git config --global core.editor 'vim -c "set fenc=utf-8"'

コミットコメント書く時に自動的にvimが上がってくるように設定。好きなエディタに設定するといいだろう。

git config --global grep.lineNumber true
git config --global core.pager "lv -c"

git grepの結果にhitしたところの行数を表示する。これなんでデフォルトfalseだし・・・ core.pagerはgit logとかgit diffの文字化け対応。

git config --global alias.graph 'log --graph --date-order -C -M --pretty=format:"<%h> %ad [%an] %Cgreen%d%Creset %s" --all --date=iso'

git graphでブランチの分岐点をAAで表示してくれるようにaliasを設定。

ローカルでの処理

ローカルレポジトリに対する操作のお話。

git fetch #リモートレポジトリの更新差分を持ってくる
git merge origin/branch_name #持ってきた差分をローカルブランチに適用

git fetchでリモートレポジトリの差分を取得します。差分はローカルのorigin/リモートブランチ名においてあるのでgit mergeで自分のローカルレポジトリに反映させます。まとめてgit pullでできるんだけどgit fetchで更新状態確認したいのでこの手順でやってます。

git checkout -b 新しいブランチ名 元にするブランチ名 #新しいブランチを作成する

トピックブランチを作ったりするときに使います。あとはgit fetchで持ってきたリモートにしかないブランチを元に新しいブランチをローカルに作ることもできます。git branch -b staging origin/stagingみたいな感じ。

git rebase -i コミットハッシュ #コミットハッシュで指定した所までのコミットをまとめる

コミットハッシュで指定したコミットまでのコミットを対話モードでまとめます。*1IEめ!IEめ!とかIE対応とか怪しいコミットがあったらまとめておきましょう。

git rebase --abort #rebaseやめたい
git rebase --skip #無視して続行

rebase中に途中でコンフリクトしたりエラーで止まった時に最初からやり直したいときは--abort。エラー無視して続行する場合は--skip

git branch -m 元のブランチ名 新しいブランチ名 #ブランチ名の変更
git branch -D ブランチ名 #ブランチの削除

ブランチ名を変更します。ブランチ名typoしてリモートに入れたら割と恥ずかしい。いらなくなったトピックブランチは削除しましょう。

git pull --prune #リモートレポジトリにないローカルブランチの削除

リモートレポジトリにないローカルブランチを削除する。定期的にやらないと手元がトピックブランチだらけになる。

git commit --amend #コミットメッセージの修正

前回のコミットメッセージを修正する。typoすると割とはずかしい。

git branch -av #ローカルのブランチ一覧
git status #次のコミットに含まれるファイル情報
git log #コミットログ

この3つはこまめに叩く確認コマンド。git branch -avでローカルに保持しているリモートレポジトリの情報とローカルレポジトリの両方の最終コミットメッセージとハッシュを表示。git statusで次のコミットに含まれるファイルの情報を表示。コミット前に確認してaddし忘れた><なんて言う事態を避ける。git logはブランチのコミットログを確認。

git remote add aliasname url
git remote rm aliasname url

レポジトリURLの作成と削除。同じレポジトリを他のリモートに入れたい時とかはここに設定しておく。例えばgit remote add githubrepo your_github_resitory_urlみたいなかんじ

stash

変更を一時的に保持しておく仕組み。git stash使うとgit使っててよかったわぁと割と幸せになれる仕組み。

git stash #変更をstashに
git stash pop #stashに入れた変更を今いるブランチに適用
git stash apply #stashに入れた変更を今いるブランチに適用
git stash drop #stashに入れた変更を今いるブランチに適用
git stash list #stashに入れた変更のリスト

popとapplyの違いは適用後にstashを捨てるかどうか。popは捨てる。applyは捨てない。stashカウントを表示しておけばstashしすぎてあばばばばばってこともなくなるので便利です。stashカウントの表示についてはdotfile/regtan.zsh-theme at master · regtan/dotfile · GitHub のgit_prompt_stash_count()をごらんください。

リモートレポジトリに対する操作

リモートレポジトリに対する操作のお話。正直あんまりないような気がする。

git push --delete origin branch_name #リモートブランチを消す
git push origin :branch_name #リモートブランチを消す

上の方がdeleteを指定して削除。*2下の方はリモートブランチにnullをpushするという意味。ちなみに: > filenameってやると指定したファイルの中身を全て削除することができます。はい。豆知識。いらなくなったトピックブランチを消す時に使う

git push origin local_branch_name:remote_branch_name #別名でpushする

ローカルブランチ名と違う名前でリモートにpushしたい時はこんな感じ。

まとめ

たぶんgitのほうがsvnよりわかりやすいし失敗してもリカバリしやすいから皆さん.zshrcなどにalias svn='git'って書いてgit使えばいいとおもいます。あとgit助けてはとても便利なので入れておきましょう。

*1:エディタが起動して指定した所までのコミット一覧が表示されてそこからsquashを選ぶとまとめることが出来ます。

*2:via:http://twitter.com/#!/yuroyoro/status/217627535259865089