人間らしいGitのエイリアス

断固としてコンピュータ言語を拒絶する

私の知っている最も一般的な.gitconfigは、ユーザ名の設定だけが記されたものです。そして、その次に一般的なものはこれです。

[alias]
  ci = commit
  cia = commit -a
  cam = commit --amend
  cama = commit --amend -a

  cl = clean
  cldf = clean -df

  res = reset
  resa = reset HEAD

  ...

  # 82 more 4-character aliases

このコンフィグは、要するにあなたの頭の中のスペースをキーストロークに置き換えます。短縮コマンドのエイリアスを覚えれば、タイピング数の節約が可能です。しかし私はこれが好きではありません。私はタイプミスをしますし、睡眠不足なこともたまにあるので、このエイリアスではやりづらくなってしまうことが殆どです。コンピュータ言語に屈して私が適応するのではなく、コンピュータ言語の方が私のやり方を学ぶべきです。シェルのオートコンプリート機能もあるので、私はそれほど短縮コマンドにはこだわっていません。その代わりに、リアルな言葉を使って全ての作業をより人間らしくしたいと思っています。

Gitのエイリアスを使った私の目標は次の2つです。

  1. GitのUIの扱いにくさを取り除く
  2. いくつかの一般的なワークフローを高速化する

例えばGitでは、何かのリストをリポジトリから取得しようとすることは、何とも一貫性がありません。私はこれを修正しました。

branches = branch -a
tags = tag
stashes = stash list

取り消す場合の一般的な操作についてはどうでしょうか? 私はGoogleに”ファイルをアンステージする方法”を聞いてみようとは決して思いません。恐らく、よく分からないコマンドが出てくるでしょう。

unstage = reset -q HEAD --
discard = checkout --
uncommit = reset --mixed HEAD~
amend = commit --amend

より強力なバージョンもあります。

nevermind = !git reset --hard HEAD && git clean -d -f

これでインデックス内の変更をアンステージし、作業ディレクトリの変更を取り消し、新しいファイルを削除することができます。

また、私は次のものも非常に気に入っています。

graph = log --graph -10 --branches --remotes --tags  --format=format:'%Cgreen%h %Creset• %<(75,trunc)%s (%cN, %cr) %Cred%d' --date-order

いつ誰がどのような操作をしたのかが分かる、リアルタイムのタイムラインを見ることができます。さらに以下も良い例です。

precommit = diff --cached --diff-algorithm=minimal -w

これが私のワークフローの鍵となる部分です。コミットする前に毎回これを実行し、取り消しコマンドを使う必要がないことを確認しています。

コンピュータ言語に屈するのではなく、自分の考え方と作業方法にエイリアスを屈服させてください。キーストロークを節約するだけでなく、自分にとっての価値をエイリアスに反映させましょう。

Redditのコメントから、この記事への素晴らしい提案をいくつか頂きました。

Kasbahさんからのunmerged = diff --name-only --diff-filter=Uと、WrongSubredditさんからのremotes = remote -vが私のお気に入りです。どうもありがとうございます。

私のGitエイリアスの全リストはdotfilesのレポートに載せています。