21
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

リモートブランチの git checkout を peco で簡単にする

Pull Request のレビュー時などリモートブランチを落としてくる際、毎回ブランチ名をコピペしてチェックアウトするのが地味に面倒なので peco でブランチを選択するだけでチェックアウトできるようにしました。

git-checkout-by-peco.gif

コマンド

git checkout $(git branch -a --sort=-authordate | cut -b 3- | grep -v -- "->" | peco | sed -e "s%remotes/origin/%%")

( 上の動画では oh-my-zsh のコマンドエイリアス で git コマンドを短縮しています )

追記 (2019/01/16)

コマンドをちょっと改良しました。

git branch -a --sort=-authordate | grep -v -e '->' -e '*' | perl -pe 's/^\h+//g' | perl -pe 's#^remotes/origin/##' | perl -nle 'print if !$c{$_}++' | peco | xargs git checkout

変更点:

  • リモートブランチとローカルブランチをまとめて表示するようにしました。
  • peco を CTRL-C などで中断した場合、そこでコマンドを終了するようにしました。 (git checkout を走らせない)
  • GNU / BSD 環境を気にせず使えるようにする為に Perl を使うように置き換えました。

エイリアスを設定したい場合は .bashrc や .zshrc などに以下の関数定義を追記すれば gcop でブランチを選択できるようになります。git checkout peco の略ですがお好みで。

gcop() {
  git branch -a --sort=-authordate |
    grep -v -e '->' -e '*' |
    perl -pe 's/^\h+//g' |
    perl -pe 's#^remotes/origin/##' |
    perl -nle 'print if !$c{$_}++' |
    peco |
    xargs git checkout
}

パイプ中の各コマンドの解説

git branch -a --sort=-authordate

リモート追跡ブランチも含めたブランチ名の一覧を、ブランチの鮮度順に逆順ソートした状態で取得します。

grep -v -e '->' -e '*'

以下の2パターンの行を取り除きます。

  • origin/HEAD の向き先が含まれている行:
    • e.g. origin/HEAD -> origin/master
  • カレントブランチの行:
    • e.g. * develop

perl -pe 's/^\h+//g'

各行頭のスペースを削除します。

perl -pe 's#^remotes/origin/##'

# はデリミタです。(スラッシュのエスケープ地獄を回避するためにスラッシュ以外をデリミタに使用。)

リモート追跡ブランチ名の先頭には remotes/origin/ が付きますが、これを含めた状態でそのままチェックアウトすると、ローカルブランチが作成されず、いわゆる detached HEAD な状態になってしまい不便なので取り除きます。

perl -nle 'print if !$c{$_}++'

ソートせずに重複行を取り除きます。

peco

ぺこ。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
21
Help us understand the problem. What are the problem?