Help us understand the problem. What is going on with this article?

リモートブランチの 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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした