Gitのalias機能で超効率的に作業する
皆さんGitは使っているでしょうか?Subversionを使用してソースコードを管理していた頃が少し懐かしいですね。
最近は開発者以外もGitを使ってプロジェクトにコミットすることも増えていると思います。そのような人たちは git add
, git commit
, git push
のような基本コマンドのみしか使わないと思いますが、Gitを使いこなせることは作業の効率アップへと繋がるので是非もっと習得して欲しいと思っています。
alias機能を使って効率アップ!
gitのaliasはコマンドで定義されているのではなく、.gitconfig
に記述される形で利用することが可能です。.gitconfig
に直接記述することも可能ですし、コマンドで定義することも可能です。
設定方法 — 直接記述
よく使われる、自分の.gitconfig
を例にします。Vimで~/.gitconfig
を開き、[alias]
セクションが無ければ追加をして記述します。
$ vim ~/.gitconfig
[user]
name = Shintaro Kaneko
email = kaneshin0120@gmail.com
[core]
editor = vim
[alias]
s = status
ss = status -s
sh = show
この例では
git s
=>git status
git ss
=>git status -s
git sh
=>git show
のようなエイリアスとなっています。
オススメalias
aliasの定義の仕方がわかったので、実際に私が使っているオススメのエイリアスを紹介します。
1. エイリアスでaliasコマンド
定義したエイリアスを確認するためにalias
というエイリアスを定義しています。
[alias]
alias = !git config --get-regexp '^alias\\.' | sed 's/alias\\.\\([^ ]*\\) \\(.*\\)/\\1\\\t => \\2/' | sort
git alias
を叩くことによって自分が定義したエイリアスのリストを表示することが可能です。
2. prettyなlogを表示
[alias]
ta = log --graph --branches --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(green)- %an, %cr%Creset'
gitのlogは--pretty
オプションによってフォーマットを変更することが可能です。
エイリアスの命名を ta
にした理由は忘れましたが、一番使っているエイリアスコマンドです。
ログの折り返しが入ってしまってい見辛くなっていますが、ブランチ別になっているのでわかりやすい出力です。(tig?ナニソレ?
もう一つ、logでオススメなエイリアスです。
[alias]
ll = log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --numstat
こちらは変更のあったファイルとそのファイルの修正ライン数がわかるようになっています。
3. リベースを行うpull
git pull
コマンドはそのまま使用すると変更点のあるローカルのリポジトリをマージしてしまいます。--rebase
オプションを使用することによって、マージではなくリベースを行ってくれるため、自分のローカルの変更点を常に最新に保つことができます。
[alias]
drag = pull --rebase
git pull --rebase
は有名ですが、毎回--rebase
を打つのはダルいですね。あと、drag
の命名はpull
よりかも引きずる印象を持たせるためにしています。drug
ではないです。
4. ローカルとリモートのブランチを同期する
大人数のプロジェクトではリモートとローカルにブランチの差分がかなり発生します。(開発する上では問題ないですが)
その時に使用するのがgit refresh
コマンドです。
[alias]
refresh= !git fetch origin && git remote prune origin
ローカルにあるブランチの情報はprune
しない限り消えないのと、リモートのブランチ情報を常に最新に保つためです。これを叩くだけでスッキリする気がします。オススメです。
5. コミット関連
リモートにプッシュする前は気兼ねなくコミットをしたいものです。(リモートにプッシュするときはリベースをしてまとめましょう)
[alias]
aa = !git add . && git add -u && git status
cam = commit --amend
wip = commit -m 'wip'$ git aa # 全ての変更をステージに上げる
$ git wip # wipというコミットメッセージでコミットする
全ての変更をステージに上げ、「wip」というコミットメッセージをでコミットするときに$ git aa && git wip
を「タ-ッン」と叩きつけます。コミットメッセージを修正したくなったらgit cam
で対応することが可能です。
6. 直近との差分を調べる
[alias]
d = diff
d1 = diff HEAD~
d2 = diff HEAD~2
d3 = diff HEAD~3
diff
はリビジョンを指定して差分をチェックすることができるので、最近コミットされた(HEADに近い)コードとの差分をチェック
7. 指定した差分を調べる
[alias]
dr = "!f() { git diff "$1"^.."$1"; }; f"
lc = "!f() { git ll "$1"^.."$1"; }; f"
diffr = "!f() { git diff "$1"^.."$1"; }; f"
エイリアスは外部コマンドを使用することも可能です。(最初のaliasで使っていましたが)
8. git管理ファイルを検索
[alias]
f = "!git ls-files | grep -i"
gitの管理対象となっているファイルのリストからgrepを行います。使い方としては git f main
のようなコマンドを叩きます。
まとめ
エイリアスを使いこなすことができれば、いつも使用するコマンドを短縮することができるので是非エイリアスを使ってください。
定義したエイリアスがわからなくなったら git alias
を叩くことによって定義したエイリアスがわかるので、どんどん定義してください。
今回あげたオススメエイリアスは一例でしかないのと、今後は自分でベストなエイリアスを見つけ出してください!
おまけ:My .gitconfig
いつも自分が開発で使用しているエイリアスはdotfilesで管理しているので参考にしてください。
おまけ:( ^o^) < master
画像にあるターミナルでコマンドを叩く部分に顔文字があるのと、外の勉強会に登壇するとよくツッコミが入るのでご紹介します。
顔文字をターミナルに入れる理由は、ステータスの失敗/成功がわかりやすいのと、癒されるからです。
私はいつもzsh
を使っているので、zsh
のPS1
に下記のような設定をしています。
parse_git_branch()
{
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ \1/'
}# PROMPT1
PS1="%{[0m%}
%{[32m%}[%n@%m] %{[33m%}%~%{[0m%}
%(?|%{[36m%}( ^o^%) <|%{[31m%}(;^o^%) <)%{[35m%}\$(parse_git_branch) %{[0m%}"ターミナルに顔文字を使いたい方は是非パクってください :)