Gitを使った開発をしていると、特定のコミットにcheckoutすることが一日に何回もあると思います。
ブランチやタグの割り当てられていないコミットの場合、以下のような手順でコミットIDを指定する必要があり、面倒です。
-
git log
でツリーを表示する - ckeckoutするコミットのコミットIDをコピーする
- コミットIDをペーストしてcheckoutする
そこで、上の一連の流れをスムーズに行うシェル関数を、fzf
を使用して実装してみました。
前提
fzf
がインストールされていることを前提とします。
fzf
そのもの及びインストール方法については本家をご参照ください。
実装
# fco - checkout git commit
fco() {
local commit
commit=$(git log --graph --color=always --remotes --branches \
--format="%C(auto)%h%d %s %C(white)%C(bold)%cr" "$@" |
fzf --ansi --no-sort --reverse --tiebreak=index --bind=ctrl-s:toggle-sort |
grep -o '[a-f0-9]\{7\}') &&
git checkout $commit
}
関数名やgit log
とfzf
のオプションはお好みで変更してください。
上の実装だと以下のようになります。
参考にした記事
今回の実装は参考記事様でのfbr
とfshow
をおおいに参考にしています。