たった 8 つの alias で git を大幅にわかりやすくする

More than 1 year has passed since last update.

こんにちは。皆さんは git を使っていると思います。が、

「 git は好きだが、 git の command 体系はどうにも我慢ならない」

という方が多いようです。実を言うと私もそうです。そこで私は alias をいろいろ定義して、 command 体系を少しでもましなものに近づけようとしています。今日はそんな私の気に入っている alias を紹介します。

その 1 g -> git

まずはこれです。 git なんて日に 100 回くらい打つ command ですから、 1 文字にしてしまいましょう。

その 2 stage -> add

git のわかりづらさの原因の一つは、同じ・ほぼ同じ概念に違う言葉が当てられていることではないでしょうか。その一つが stage にまつわる言葉です。

  • stage
  • add
  • cache

の 3 種の言葉が、 stage 関係の操作に使われています。そこで、これらは stage に統一してしまいましょう。私は

$ g stage <file>

git add を実行するようにしています。

その 3 unstage -> reset HEAD

stage した後 cancel したくなることは、当然よくあることです。私はこの操作を unstage と呼んでいます。標準ではこの操作は

$ git reset HEAD

と、 stage の香りが微塵もしない command が当てられています。これはわかりづらいので、私は

$ g unstage

で unstage できるようにしています。

その 4 ds -> diff --cached

その 5 du -> diff

その 6 df -> diff HEAD

4 - 6 はまとめて説明してしまいます。

ds は、最後の commit と stage の差分を示します。もう stage した作業内容とも言えます。 diff staged の略と考えてください。

du は、 stage と worktree の差分を示します。まだ stage していない作業内容とも言えます。 diff unstaged の略と考えてください。

df は、最後の commit と worktree の差分を示します。作業内容の全てです。 diff full の略と考えてください。

以上の関係をまとめた図が、こちらです。

git.png

その 7 control -> add

その 8 uncontrol -> rm --cached

標準の git add <file> は、次の二つの意味を持ちます:

  • <file> をこれから git で version 管理すると宣言する
  • <file> にした作業内容を stage する

私はこれが複雑だと感じたので、

$ git control <file>

で version 管理の宣言をすることにしています。

反対に、 git による version 管理をやめる宣言は、標準では

$ git rm --cached <file>

です。 File を消すわけでもないのに rm という文字列が入っているのが嫌だったので、私は

$ g uncontrol <file>

で version 管理をやめることにしています。

元ネタ

さて、以上 8 つの alias はどうだったでしょうか。これらは、私が初めて考えたものではありません。 eg という tool ( http://qiita.com/nojima/items/90120968a6412ec07a27 ) から多くの hint をいただいています。特に、用語の統一、 diff の引数の整理という idea はこれに負うところが大きいです。感謝したいと思います。