git configコマンドでaliasを設定
git config --global alias.co checkout
このようにcheckoutにcoというエイリアスを設定すると、git co masterと打つだけでgit checkout masterと同等に打つのと同等になります。
git co -b hogeのようにエイリアスに続けて追加で複数のオプションや値を渡すこともできます。
なお、オプション付きのエイリアスを設定する場合は下記のように''か""でクオートしてあげる必要があります。
git config --global alias.pf 'push -f'
git config --global alias.aa 'commit --amend -a --no-edit'
律儀にgit checkout masterとカタカタとタイプしている人を見ると、エイリアス設定しようよ!と言いたくていつもムズムズしちゃいます。
git config --global alias.cm 'checkout master'
このようにエイリアスを設定すればgit cmターーン!!!(ドヤ顔)でオッケー。
~/.gitconfigを直接編集してaliasを設定
git config --globalで設定した項目は、ホームディレクトリ配下の~/.gitconfigファイルに保存されます。git configコマンドでちまちま設定しなくても、このファイルを直接編集してもオッケーです。[alias]の行に続く部分が文字通りエイリアスの設定です。
下記が僕のaliasの設定です。
これをコピペして、思うままにカスタマイズして使っていただけると幸いです。
[alias]
a = add
b = branch
c = commit
d = diff
f = fetch
g = reflog
l = log
m = merge
p = pull
r = rebase
s = stash
t = tag
w = show
aa = commit --amend -a --no-edit
bd = branch -D
bl = branch -a
cm = checkout master
co = checkout
cp = cherry-pick
df = difftool
du = difftool @{upstream}
mm = merge origin/master
pf = push -f
re = reset --soft HEAD~
rh = reset --hard
ri = rebase -i
rs = reset --soft
sl = stash list
st = status
su = submodule update
pop = stash pop
wip = commit -a -m \"[ci skip] WIP WIP WIP WIP WIP\"
amend = commit --amend --no-edit
shallow = clone --depth 1
これらの中から僕がよく使う超絶オススメ必殺エイリアスを紹介していきます。
お勧めalias
git aa 直前のコミットにブッコムやーつ
git config --global alias.aa 'commit --amend -a --no-edit'
これは、コミットされていない状態の全て差分を、直前(最新)のコミットにぶっこむコマンドのエイリアスです。
commitに--amendオプションを付けると、新たにコミットを追加するのではなく、直前のコミットを修正するような動作になります。
-aオプションを付けるとgit addでstageに追加していない修正もコミットの対象になります。git add .を省略できるイメージです。
最後に--no-editを付けることでコミットのタイトル・メッセージを編集するステップを省いています。
直前のコミットに修正漏れがあったような場合に、「追加の修正」のようなコミットを付け足すのは超絶イケてないので、今日からはgit aaを使いましょう!
git wip とりまコミットしとくやーつ
git config --global alias.wip 'commit -a -m "[ci skip] WIP WIP WIP WIP WIP"'
これは、コミットされていない状態の全て差分を、サクッと一発でコミットするコマンドのエイリアスです。
[ci skip]をコミットタイトルに含めることで、無駄にCIを回さないようにするオモイヤリもある奥ゆかしいエリアスです。
作業を中断しなければならない場合などに咄嗟にgit stashを使うと、stashの闇の中で修正が迷子になってしまうので、git stashではなくgit wipしておくと良いです。
git re コミットを取り消すやーつ
git config --global alias.re = 'reset --soft HEAD~'
これは、直前(最新)のコミットを取り消して、その差分をstageに戻すコマンドのエイリアスです。
一度コミットをバラして整理しながらcommitし直したい時に使います。
git reを連打すればどんどんcommitを取り消して行けるので便利ですが、branchを切った点より行き過ぎてしまうと困ったことになるので注意しましょう。
TL;DR
僕はgit wipとgit aaでとりあえず修正を1つのコミットにまとめていって、PRを出す直前にgit reでコミットを取り消して、整理しながらコミットをまとめ直すようにしています。
ソースコードはすごく丁寧で綺麗にコーディングされているのに、gitの履歴(コミットログ)には無頓着になされている人のPRをみると、ちょっと残念というかもったいないなーと思ってしまいます。
gitの履歴を綺麗に保つことは自分にとっても、レビューアにとっても、あとあと履歴を追ってバグの原因探しをする羽目になる人のためにも、とても大切なことだと思います。
ソースコードだけでなく、gitの履歴も綺麗にするように気を使っているエンジニアがもっと増えて欲しいなと思ってます!