LoginSignup
0
0

More than 3 years have passed since last update.

[Git] GitHubのPullRequestされているブランチをpecoでサッとチェックアウトする

Posted at

GitHubのPullRequestされているブランチをpecoでチェックアウトする

普段業務でGitHubを使っており、PullReqestからのレビュー、マージなどを行っています。
僕はレビューはGitHub上で差分だけ見るのではなくて、ローカルに対象ブランチをcheckoutして実際に動かしながらレビューするときが多いので、

git fetch
git checkout -b pr-branch-name origin/pr-branch-name

としてレビューを始めることが度々ありました。
・・・が、今日、ふと、こんだけ毎日レビューしてるのに、毎回これやるのめんどいよな、と思いちょっと調べてみました。

道具

  • hub
    GitHubが作ってるらしい、git コマンドをラップしてさらにGitHub特有の処理とかを便利にできるコマンドを追加したツールです。

  • peco
    みんな大好きpecoです。hubのコマンドを使ってcheckout対象ブランチを選びます。

実装

hubのサブコマンドで pr というGitHubのプルリクエスト関連の内容を取得するコマンドがあり、このサブコマンドで

  • list
    いろんな条件で、カレントディレクトリのプロジェクトが対応するGitHubのリポジトリのPRを取得する

  • checkout
    PullRequestの番号( #11 とかの番号)をキーにローカルに対象ブランチをcheckoutする。
    すでにcheckoutしたブランチが合った場合は、git pullして最新にする

というのがあり、これらを使って hub pr list の結果を適当にフィルタ、加工して、pecoで、PullReqest番号を選択し hub pr checkout でcheckoutします。

zsh/bashで動く関数として実装しています。 .zshrc, .bashrc 等に追加して、 sourceします。
ghprというコマンドとして動くようにしています。

# pecoでいまopenされているprのブランチをチェックアウトする
function peco-checkout-github-pr() {
  local selected_buffer=$(hub pr list -s open -L 20 --format='%t :%H :%I%n' | peco --prompt 'pull requests>')
  if [ -n "$selected_buffer" ]; then
    local pr_no=$(echo $selected_buffer | awk -F":" '{print $NF}')
    hub pr checkout $pr_no
  fi
}
alias ghpr='peco-checkout-github-pr'

スクリーンショット 2019-07-18 22.02.55.png

こんな感じのPullReqestのリストが合った場合に、
スクリーンショット 2019-07-18 22.08.49.png
で選択すると、
スクリーンショット 2019-07-18 22.09.07.png

と、無事チェックアウトされました。便利。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0