Gitのalias機能で超効率的に作業する

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を叩くことによって自分が定義したエイリアスのリストを表示することが可能です。

git-aliases_02

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 にした理由は忘れましたが、一番使っているエイリアスコマンドです。

git-ta_02

ログの折り返しが入ってしまってい見辛くなっていますが、ブランチ別になっているのでわかりやすい出力です。(tig?ナニソレ?


もう一つ、logでオススメなエイリアスです。

[alias]
	ll = log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --numstat

こちらは変更のあったファイルとそのファイルの修正ライン数がわかるようになっています。

git-lll_02

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-main_02

まとめ

エイリアスを使いこなすことができれば、いつも使用するコマンドを短縮することができるので是非エイリアスを使ってください。
定義したエイリアスがわからなくなったら git alias を叩くことによって定義したエイリアスがわかるので、どんどん定義してください。

今回あげたオススメエイリアスは一例でしかないのと、今後は自分でベストなエイリアスを見つけ出してください!

おまけ:My .gitconfig

いつも自分が開発で使用しているエイリアスはdotfilesで管理しているので参考にしてください。

おまけ:( ^o^) < master

画像にあるターミナルでコマンドを叩く部分に顔文字があるのと、外の勉強会に登壇するとよくツッコミが入るのでご紹介します。

顔文字をターミナルに入れる理由は、ステータスの失敗/成功がわかりやすいのと、癒されるからです。

Screen Shot 2016-02-24 at 6.54.21 PM

私はいつもzshを使っているので、zshPS1に下記のような設定をしています。

parse_git_branch()
{
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ \1/'
}

# PROMPT1
PS1="%{%}
%{%}[%n@%m] %{%}%~%{%}
%(?|%{%}( ^o^%) <|%{%}(;^o^%) <)%{%}\$(parse_git_branch) %{%}"

ターミナルに顔文字を使いたい方は是非パクってください 🙂

  • このエントリーをはてなブックマークに追加

エウレカでは、一緒に働いていただける方を絶賛募集中です。募集中の職種はこちらからご確認ください!皆様のエントリーをお待ちしております!

Recommend

Go言語のベンチマークでパフォーマンス測定

UI改善における仮説検証の3つのポイント