kenjuの日記

About Programming, Mathematics and Security

最近気に入っているgit aliases

ここ半年間くらいマイブームのgit aliasesをあげてみる。

g = git

そもそもgitコマンドをgにaliasを貼っている。 普段の開発の中で一番使うことが多いコマンドの一つだからだ。

# ~/.bashrc
alias g='git'

ただし、これだけだとgit-completion.bashのコマンド補完が動かない。 したがって、以下のように__git_completeに対してもlow level APIレベルでaliasを貼ってあげる。

# ~/.bashrc
# enable git-completion with aliases
# http://stackoverflow.com/questions/342969/how-do-i-get-bash-completion-to-work-with-aliases
__git_complete g _git_checkout
__git_complete gt _git_checkout
__git_complete gi _git_checkout
__git_complete got _git_checkout

git staged

ステージングにあるファイルの状態を見たいときはよくある。commitした後や、git cherry-pickした時など。

# ~/.gitconfig
 staged = diff --cached

git pp

git pull --pruneの略。git pullするときに、古いブランチデータを残しておくメリットは全くないため、いつも--pruneオプションをつけてpullしたかったことが理由。

# ~/.gitconfig
pp     = pull --prune

git conflicts

IDEとかVS Code使っていると、エディターの機能でコンフリクトしているファイルをわかりやすく表示してくれる場合はあるけど、ターミナル上での作業が多いときはこのaliasを愛用している。

# ~/.gitconfig
conflicts = diff --name-only --diff-filter=U

git ss, git spop, git slist

スタッシュ周りはよく使う。git stash popとか打つのが面倒なので、↓のようなaliasesを貼っている。

g slistが本来はgit stash listであることを考えると、人生だいぶ得している気がする。

# ~/.gitconfig
  ss      = stash
  slist   = stash list
  spop    = stash pop

git sdiff1, sdiff2, sdiff3

スタッシュ周り。スタッシュとのdiffを見たいときによく使う。

# ~/.gitconfig
  sdiff   = diff stash@{0}
  sdiff1  = diff stash@{1}
  sdiff2  = diff stash@{2}

git alex

これはgit-aliasex(= aliase execution)という、「git aliasの一覧を表示 > pecoで選択 > 実行する」というスクリプトを自分で書いていて、それを呼び出すためのコマンド。

# ~/.gitconfig
  alex         = !git-aliasex

このように、ある程度複雑になったaliasesは別ファイルとして管理していて、そのコマンドへのPATHを通し、それに対してaliaseを貼る、というパターンはいくつか持っている。

git-aliasexの実態は、シンプル。

#!/bin/sh -xe

eval $(git aliases | peco | cut -f2 -d"=" | sed -e 's/^[ \t]!*//')

git pushme

これも割とお気に入りで、HEADをトラッキングしているリモートブランチにpushしてくれる。

forkされたブランチ上で作業している時などに便利。

# ~/.gitconfig
  pushme = !git-pushme

ソース dotfiles/git-pushme at master · kenju/dotfiles · GitHub

git blameshow

最後はgit blameshow。これも自前で書いた簡単なスクリプトへのaliase。

これは「git blameの表示 > pecoで選択 > 選択された行が最後に編集されたcommitに対してgit show」してくれる。大抵git blameで調査するときは、それが含まれたcommitも見に行くことが多いので、時間短縮のために書いた。

# ~/.gitconfig
  blameshow = !git-blameshow

これも内容はシンプルで、簡単なスクリプトをpipeで繋げているだけ。

#!/bin/sh -xe
# $1 = filename

git blame $1 | peco | awk '{print $1}' | xargs git show

ソース dotfiles/git-blameshow at master · kenju/dotfiles · GitHub

元ファイル

管理レポジトリは↓

github.com