January 27, 2017

Gitでリモートブランチを追跡しつつチェックアウトするのに消耗しないために

Categories: 技術 | Tags: #Git #fzf #zsh


最近.gitconfig.zshrc をお掃除していて、自分で以前組んでいて便利そうだと思っていたエイリアスを更によくしてみたのでそれを晒してみます。
晒す内容はタイトルの通りです。

スマートにリモートブランチを追跡しつつチェックアウト

Gitでリモートブランチを追跡しつつチェックアウトするときは、

$ git checkout -b [branch_name] [remote]/[branch_name]

と、 checkout -bを使うよりも、

$ git checkout -t [remote]/[branch_name]

の方がスマートに、リモートを追跡しつつチェックアウトが可能です。
[remote]origin[branch_name]feature/hogeなら、

$ git checkout -t origin/feature/hoge

で出来ます。

本題: エイリアスを張る

ただ、これ毎回書くのがだるいので、こんな感じでエイリアスを張ります。

# .gitconfigに以下を追加
cot = "!f() { git checkout -t $1/$2; }; f"

# 必要に応じて `.zshrc`等に書く
alias g=git

そうすると、

$ g cot origin feature/hoge

のように、git push origin master みたいな感覚で使うことができるようになります。
ここで満足してはいけない、、ちょっとタイピングする文字減っただけなので便利になったとは言いづらい…。
そこで、[以前紹介したfzf]()を用いて、リモートのブランチ一覧から選択してそれを追跡しつつ、チェックアウトしてみます

高みへ: fzfと組み合わせる

fzf()あるいはpeco)を準備したら、 .zshrc 等に以下のようなグローバルエイリアスを定義します

alias -g RB='`git branch -r | fzf --prompt "Remote Branches>" | head -n 1 | sed -e "s/^\*\s*//g"`'

また、前回定義したgitのエイリアスcotを次のように書き換えます

cot = checkout -t

これで準備が整いました。

使ってみる

# 必要があればfetchする
$ g fetch
# cotとRBを組み合わせる
$ g cot RB

image

これでfzfで選択しつつ、リモートブランチを追跡しつつチェックアウトすることができます。 タイピングがわずか8文字(スペース含め)。

やっぱりfzfはすげえや。


written by sgr-ksmt