指定のブランチやタグの間でマージされたプルリク一覧表示する one-liner


## 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](http://scottchacon.com/2011/08/31/github-flow.html) で master ブランチ一本でやるのはなかなか難しくて、[git-flow](http://nvie.com/posts/a-successful-git-branching-model/) にちかい開発フローを採用している場合、 

- master に development をマージするときにはどんなプルリクが入るのか
  - master ブランチにはどんな hot-fix ブランチ（プルリク）がマージされてるのか
  - development ブランチにはどんな feature ブランチ（プルリク）がマージされているのか

ということをなんとなく確認したい。

- `git diff` や `git rev-list` などを利用すればブランチ間などのファイル差分（コミット一覧）を確認することができる。
- 一方で、github を利用している場合はプルリクにその差分の概要や経緯等がコメントとともに載っている
- つまり、 **コミット単位じゃなくてプルリク単位** で差分を見たい

ということで上記の one-liner がすこし役立つ


### 例

たとえば、 https://github.com/elixir-lang/elixir というリポジトリを例にしてみる。

[releases](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
```

### 関連

- [AとBのブランチを比べてAブランチにしかないコミットを探したかった](http://qiita.com/luckypool/items/f4f9be5c35db34bf38c3)
- [Git - git-rev-list Documentation](http://git-scm.com/docs/git-rev-list)
- [GitHub Flow](http://scottchacon.com/2011/08/31/github-flow.html)
- [A successful Git branching model](http://nvie.com/posts/a-successful-git-branching-model/)