2015年3月25日
Gitコマンドラインショートカット
(2015-02-13)by Jonathan Suh
本記事は、原著者の許諾のもとに翻訳・掲載しております。
私は多くの時間をターミナルの前で過ごしていて、そのほとんどを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
これらのエイリアスと関数を使えば、何千ものキーストロークを節約し、あなたの寿命を延ばすことになるでしょう。この他にも特に役立つエイリアスや関数をご存じなら、
私とシェアしてください 。
株式会社リクルート プロダクト統括本部 プロダクト開発統括室 グループマネジャー 株式会社ニジボックス デベロップメント室 室長 Node.js 日本ユーザーグループ代表
- Twitter: @yosuke_furukawa
- Github: yosuke-furukawa