one-liner
git rev-list --right-only <from_branch_or_tag>...<to_branch_or_tag> | xargs git show -q | grep 'Merge pull request'
モチベーション
github-flow で master ブランチ一本でやるのはなかなか難しくて、git-flow にちかい開発フローを採用している場合、
- master に development をマージするときにはどんなプルリクが入るのか
- master ブランチにはどんな hot-fix ブランチ(プルリク)がマージされてるのか
- development ブランチにはどんな feature ブランチ(プルリク)がマージされているのか
ということをなんとなく確認したい。
-
git diff
やgit rev-list
などを利用すればブランチ間などのファイル差分(コミット一覧)を確認することができる。 - 一方で、github を利用している場合はプルリクにその差分の概要や経緯等がコメントとともに載っている
- つまり、 コミット単位じゃなくてプルリク単位 で差分を見たい
ということで上記の one-liner がすこし役立つ
例
たとえば、 https://github.com/elixir-lang/elixir というリポジトリを例にしてみる。
releases をみるとしっかりとタグ付けされているので、「v1.0.0」から「v1.0.4」の間でどんなプルリクがマージされたのかを見てみる
プルリクのマージコミット一覧を見る
git rev-list --right-only v1.0.0...v1.0.4 | xargs git show -q | grep 'Merge pull request'
~/w/g/elixir ❯❯❯ git rev-list --right-only v1.0.0...v1.0.4 | xargs git show -q | grep 'Merge pull request'
Merge pull request #3198 from eksperimental/pattern_operator
Merge pull request #3025 from MSch/flush-logger-after-tests
Merge pull request #2801 from fishcakez/app_env
Merge pull request #3018 from lexmag/logger-metadata-fix
Merge pull request #2953 from liveforeverx/fix_compile_error
Merge pull request #2950 from tonini/remove-dumb-terminal-warning
Merge pull request #2932 from tonini/add-modules-load-path-to-autocomplete
Merge pull request #2933 from Kabie/Regex.replace
Merge pull request #2924 from jw2013/italic
Merge pull request #2891 from chrismccord/master
Merge pull request #2882 from Frost/no-more-bright-yellow-in-ansi-docs
Merge pull request #2886 from jw2013/CRLF
Merge pull request #2838 from edgurgel/patch-1
Merge pull request #2819 from benjamintanweihao/patch-3
Merge pull request #2787 from elixir-lang/emj-hex-file-error
Merge pull request #2789 from alco/system-cmd-path-resolution
こんな感じで一覧が見れる。
これらのプルリクのURL一覧も見たいとした場合 awk
コマンドも利用しちゃえばOK
プルリクのURL一覧を見る
git rev-list --right-only v1.0.0...v1.0.4 | xargs git show -q | grep 'Merge pull request' | awk '{print "https://github.com/elixir-lang/elixir/pull/" substr($4,2)}'
~/w/g/elixir ❯❯❯ git rev-list --right-only v1.0.0...v1.0.4 | xargs git show -q | grep 'Merge pull request' | awk '{print "https://github.com/elixir-lang/elixir/pull/" substr($4,2)}'
https://github.com/elixir-lang/elixir/pull/3198
https://github.com/elixir-lang/elixir/pull/3025
https://github.com/elixir-lang/elixir/pull/2801
https://github.com/elixir-lang/elixir/pull/3018
https://github.com/elixir-lang/elixir/pull/2953
https://github.com/elixir-lang/elixir/pull/2950
https://github.com/elixir-lang/elixir/pull/2932
https://github.com/elixir-lang/elixir/pull/2933
https://github.com/elixir-lang/elixir/pull/2924
https://github.com/elixir-lang/elixir/pull/2891
https://github.com/elixir-lang/elixir/pull/2882
https://github.com/elixir-lang/elixir/pull/2886
https://github.com/elixir-lang/elixir/pull/2838
https://github.com/elixir-lang/elixir/pull/2819
https://github.com/elixir-lang/elixir/pull/2787
https://github.com/elixir-lang/elixir/pull/2789
プルリクのURL一覧をひらいちゃう
xargs
で open
しちゃえばOK
git rev-list --right-only v1.0.3...v1.0.4 | xargs git show -q | grep 'Merge pull request' | awk '{print "https://github.com/elixir-lang/elixir/pull/" substr($4,2)}' | xargs open