🔍
あるcommitが含まれるPullRequestをシェルから開く
git log
を見ていて「このcommitってどのPRのやつだっけ?」になることがままあります。
git log --graph
でmerge commitを探したり、GitHubからそれっぽいPRを探すのも面倒なので「あるcommit hashを含むGitHubのPRをブラウザで開く」シェル関数をChatGPTに書いてもらいました。
findpr() {
local pr_number=$(git log --merges --ancestry-path --oneline "$1"..main | tail -1 | awk '{print $5}' | cut -d# -f2)
if [ -z "$pr_number" ]; then
echo "PR番号が見つからんかったわ。"
return 1
fi
local repo_url=$(git remote get-url origin | sed -E 's/^.+@github\.com/https:\/\/github.com/')
if [ -z "$repo_url" ]; then
echo "リポジトリのURLが取れんかったわ。"
return 1
fi
open "${repo_url}/pull/${pr_number}"
}
これを~/.zshrc
とかに書いておきます。あとは、
$ findpr b0600a8c
みたいにcommit hashを渡すと、その変更が含まれるPRがブラウザで開かれます。
gitリポジトリの探索はgit log -S {word}
で検索したり、git blame
でcommitを特定するだけでなく、PRを探したい場面も多いでしょう。
もしかしたら複雑なツリーをうまく追えない場面もあるかもしれませんが、私が日常使う分にはうまく動いてくれてるのでよかったら試してみてください。
Discussion
ちょこっとChatGPTに改修してもらって .gitconfigにaliasで書いてみたサンプル
(便利そうなので使ってみました共有です)
git remote get-url origin
の返り値に.git
が入っていてURLがブラウザでうまく開けなかったのでsed 's/\\.git$//'
このあたりで置換https://github.com/saxsir/dotfiles/pull/23
こんな感じのURLになってほしいのだが、https://github.com/saxsir/dotfiles.git/pull/23
を開こうとしてしまっていた$ git findpr {commit_hash}
で動くはず。