Gitのプルリク(ブランチ)単位でログを追う方法
過去に「よいコミットメッセージとは」みたいな記事を書いたこともある。
なぜコミットメッセージは良くならないのか
どうしたらGitのコミットメッセージが良くなるか考えてみたけど、 他人に期待するには無理がある という結論に至った。
技術的な課題
- Gitで
rebase -i
を使ってコミットを直すのが難しい - コミットメッセージを直すたびにCIが走る
- デプロイが遅くなる
会社的な理由
- 雑なコミットメッセージでもマージされるケースが多い
- レビュワーはコミットメッセージまで読まない
- コミットメッセージは評価(=給与)に繋がらない
コミットする人の心理
- コミットメッセージなんて使わない
- 雑なコミットする人は
git-log
やgit-blame
をそもそも使っていない - Slackで聞くなり、テレカンで相談すれば済むので
- 雑なコミットする人は
現実的な解決案
プルリクにだけは必ず情報を残すようにしておき、調査のときにコミットメッセージに期待することを諦める。
調べる側が工夫して、GitHubのプルリクを素早く開くなり、git-logでプルリク単位のdiffを閲覧できるようにするしかない。
例題
rails/rails のリポジトリで、 ab8b12eaf625d7e7a1ebf589ff4f8dbf85b65b7c
のコミットに紐づくプルリクを探す。
GitHubのプルリクを素早く探す
$ gh api /repos/rails/rails/commits/ab8b12eaf625d7e7a1ebf589ff4f8dbf85b65b7c/pulls \ -H "Accept: application/vnd.github.groot-preview+json" \ | jq -r '.[].html_url' https://github.com/rails/rails/pull/39612
gh pr view
でPRの内容をすぐ読める。
$ gh pr view $(gh api /repos/rails/rails/commits/ab8b12eaf625d7e7a1ebf589ff4f8dbf85b65b7c/pulls \ -H "Accept: application/vnd.github.groot-preview+json" \ | jq -r '.[].number')
shaを含むブランチ単位の変更を調べる
【緩募】Gitで<sha>を含むfeatureブランチがmainブランチにマージされたとき、featureブランチ全体のログを調べる方法。
— 神速 (@sinsoku_listy) 2020年12月23日
`git log <feature start> <mainのmerged commit>` みたいなログが出したい。
これだけなので簡単に取れると思ったら、すごく難しかった。
$ git bisect start --no-checkout --first-parent origin/master ab8b12eaf625d7e7a1ebf589ff4f8dbf85b65b7c $ git bisect run sh -c '! git merge-base --is-ancestor ab8b12eaf625d7e7a1ebf589ff4f8dbf85b65b7c BISECT_HEAD' $ git diff BISECT_HEAD^-
git help gitrevisions
を全部読んだけど、どうやっても プルリクのマージコミット を簡単に取得する方法がなくて、bisectする方法しか見つけられなかった。
これでプルリク(ブランチ)単位の差分をブラウザを使わずに読むことができる。
まとめ
Git初心者やデザイナーの方に rebase -i
やコンフリクト解消を頼むのは厳しいので、コミットを良い感じにするのは大変だと思うんですよね。
Git力を上げて、調査する側が頑張るのが妥当なのかなーと。