私は多くの時間をターミナルの前で過ごしていて、そのほとんどをGitコマンドのタイピングに費やしています。ワークフローを高速化して、毎日何百というキーストロークを節約するために、Bashのエイリアスと関数を使って1組のコマンドラインショートカットを作りました。
Git Bashエイリアスと関数
Gitではエイリアスを設定できますが限定的であり、節約できるキーストロークは、ほんの数ストロークです(例えば、”git checkout”の代わりに”git co”とタイプすることはできますが、まだ”git”とタイプしなければなりません)。Bashはターミナルのデフォルトのコマンドラインインタープリタなので、Bashエイリアスを設定して、さらにキーストロークを減らすこともできます。
これが、私のGit Bashエイリアスと関数のリストです。ご自分のエイリアスや関数の保存先ファイル(例えば、~/.bash_profileや~/.bashrcなど)に追加するだけで使用できます。
注意:エイリアスを設定したことがなかったり、保存先がわからなかったり、私が何の話をしているかわからないという方は、まず先に、私の記事Terminal/Bash Command-Line Shortcuts with Aliasesを読んでください。
コピー&ペーストするときは、文字の配置を崩さないことが重要です(例えば、エイリアスでは等号の前後にスペースが必要で、関数では宣言の左波括弧の後ろにスペース、コマンドの後ろにセミコロンが必要です)。変更した後は、ファイル(source ~/.bash_profile)のリロード、またはターミナルの再起動をお忘れなく。
# ---------------------- # Git Aliases # ---------------------- alias ga='git add' alias gaa='git add .' alias gaaa='git add -A' alias gb='git branch' alias gbd='git branch -d ' alias gc='git commit' alias gcm='git commit -m' alias gco='git checkout' alias gcob='git checkout -b' alias gcom='git checkout master' alias gd='git diff' alias gda='git diff HEAD' alias gi='git init' alias gl='git log' alias glg='git log --graph --oneline --decorate --all' alias gld='git log --pretty=format:"%h %ad %s" --date=short --all' alias gm='git merge --no-ff' alias gp='git pull' alias gss='git status -s' alias gst='git stash' alias gstl='git stash list' alias gstp='git stash pop' alias gstd='git stash drop' # ---------------------- # Git Function # ---------------------- # Git log find by commit message function glf() { git log --all --grep="$1"; }
このエイリアスを使えば、キーストロークが減ったとすぐに実感できるでしょう。エイリアスのほとんどはGitコマンドの単純な省略です。例えば、git add assets/css/screen.cssを実行したい時は以下のように書きます。
ga assets/css/screen.css
git checkout –b
gcb <branch-name>
独自にカスタマイズしたものもいくつかあります。私はgit logで使い勝手の良い組み合わせを2つ見つけましたので、それを使っています。gldは、git logのコミット履歴の詳細を一行表示にしてくれます。
$ gld dba068d 2015-02-11 Remove stop propagation. 37372ec 2015-02-11 Remove third-party Twitter widget.js completely and replace with intent link. 7d1a5d2 2015-02-11 Uglify critical in production task. d9bf43b 2015-02-11 Custom robots. 166b6bd 2015-02-11 Secondary page share images. 6c77889 2015-02-11 Fix share_image logic. 93df2b1 2015-02-10 Exclude topic and archives from sitemap. Change up priority. f72ccc1 2015-02-09 Social share post include Reddit. Fix http to https. 6a42288 2015-02-11 Uglify critical in production task. 8564aba 2015-02-11 Configure robots for pages.
glgはgit logのコミット履歴の詳細を、色分けされたグラフ表示にしてくれます。
gmのデフォルトでは、git mergeのエイリアスは–no-off(no fast-forward)になります。開発では多くの場合、複数のフィーチャーブランチを使いますが、これらのブランチには複数のコミットがあります。私は、このマージの履歴は重要だと感じています。
エイリアスはすばらしいものですが、設定できるのはスコープ内に限定されています。これが、Gitのlogを検索する自作関数であるglfに関数を使わなければいけない理由です。私は時々、コミットメッセージでコミットを検索してみたくなることがあります。以下のようにglfを使います。
glf "commit message"
すると、次のように出力されます。
$ glf "logic" commit 95ed7d5b6f6d168047fd8ddc86579ce09ca39394 Author: Jonathan Suh <hello@jonsuh.com> Date: Wed Feb 11 08:51:11 2015 -0600 Fix share_image logic. commit 15bbdc6001d6c95d575078cb96352943b3b321e0 Author: Jonathan Suh <hello@jonsuh.com> Date: Tue Sep 30 20:18:29 2014 -0500 Navigation link is-current logic.
私は他のGitコマンドにも、より多くの可能性を見出していますが、これら以外のものは手作業で実行します。しかし、気軽に独自で追加したり、お好きなように修正を加えたりしてください。
私は自分で、git statusエイリアスのgsを改良するために次のようにしました。
alias gs='echo ""; echo "*********************************************"; echo -e " DO NOT FORGET TO PULL BEFORE COMMITTING"; echo "*********************************************"; echo ""; git status'
gsを実行する度に、コミットを作成する前にpullすることを忘れないで済みます。
$ gs ********************************************* DO NOT FORGET TO PULL BEFORE COMMITTING ********************************************* On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working directory clean
これらのエイリアスと関数を使えば、何千ものキーストロークを節約し、あなたの寿命を延ばすことになるでしょう。この他にも特に役立つエイリアスや関数をご存じなら、
私とシェアしてください。