最近よくコードリーディングをしているので、GitLensを重宝しています。
https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens
コミットIDやコミットメッセージを簡単に見られるので、
「なぜこの変更が行われたのか」を確認することができます。神。
ただ、この情報だけでは足りず
「このコミットがマージされたプルリクを見たい」となることがあります。
こうなると、
- GitHubで該当のCommitを開く
https://github.com/[user|org]/[repo]/commit/[commit_id] - プルリクへのリンクがあるのでクリック
と確認することになりますが、繰り返していくと面倒になってきます。
そこで、シェルを作りました。
git-open-pr
#!/bin/bash -eu
DEFAULT_BRANCH=$(git remote show origin | grep "HEAD branch" | sed "s/.*: //")
COMMIT_ID=$(grep -Fxf \
<(git log --first-parent --merges --pretty=format:%H $DEFAULT_BRANCH; echo) \
<(git log --ancestry-path --merges --pretty=format:%H $1..$DEFAULT_BRANCH; echo) \
| tail -n 1)
COMMIT_MSG=$(git log $COMMIT_ID -n1 --pretty=format:%s)
PR_NO=$(echo $COMMIT_MSG | egrep --only-matching '#\d+')
GIT_URL=$(git remote get-url origin)
REPO_PATH=${GIT_URL#git@github.com:}
REPO_SIGN=${REPO_PATH%.git}
open "https://github.com/$REPO_SIGN/pull/${PR_NO#\#}"
使い方
- 上記のシェルを
git-open-pr
とか名付けて -
chmod 744 git-open-pr
(実行権限を付与) - PATHが通っている場所においてください
(私は自作シェル置き場($HOME/bin
など)を作って、
.bash_profile
や.zshrc
にexport PATH=PATH:$HOME/bin
と書いてあります) - 該当のレポジトリでCommit IDを指定して実行
$ git-open-pr xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
GitHubのプルリクページが一発で開きます
前提
- 多分Macでしか動作しません
- GitHubで「Create a Merge Commit」でマージされたプルリクでないと開けません
- マージコミットのsubjectが
Merge pull request #100 from branch_name
の形式になっていることを利用しています
動作確認環境
% sw_vers -productVersion
10.15.6 # Catalina
% xcode-select --version
xcode-select version 2373.
% git --version
git version 2.28.0
きもち
vscode拡張とか作ってvscode上で完結したいな...
参考
https://ja.stackoverflow.com/questions/12852/特定のコミットに対して-それが対象のブランチへ-どのマージコミットでマージされたかを判定するには
https://git-scm.com/docs/pretty-formats