社内の開発チームでタイトルのような問題がでていた。
初めてきいた時はちょっと信じられず、かなり疑いました(w)が、実際やってみるとほんとうにそのとおりでした。
この状態、下で図で説明していますが、コードレビュー時に致命的です。
なぜかというと、レビュー対象ではない変更差分が表示されるため、どれをレビューしていいか、まったくわからなくなるから。
まあ、ちょっとややこしいので図で説明する。
どういうことか?
こんなブランチで開発をしているとする。
これ自体はよくある形でしょう。

この時点で各BranchからMasterブランチへのプルリクエストはこうなっているはず。
BranchXからMasterへのプルリクエスト

BranchYからMasterへのプルリクエスト

BranchXの開発にBranchYの機能が必要になった
次にBranchXの開発中にBranchYの機能が必要になったため、
以下の図のようにBranchXにBranchYにマージした。
(え、それ開発スコープおかしくない?というツッコミはなしでw)

BanchYの開発が終わったのMasterへマージをする
BranchYの開発完了(やった!テストコードあるかい?)したので、Masterブランチにマージしました。
よくある感じですね。

BranchXの開発完了したので、コードレビューをするためのプルリクエストをみる。
ちなみに、今の状態は概念的にはこんな感じ。

さあ、BranchXの開発が終ったので、チームにレビューをしてもらおう。
「ん??なんかレビュアーがざわついてる。。」
「レビューア」ん。。。なんかおかしくない?変更ファイル多くない?
BranchXからMasterのプルリクエストをみてみよう。

そうです。BranchYの差分がでています。上記の概念図でも表していますが、
BranchYはすでにMasterブランチにマージされているのですが、
BranchXからMasterのプルリクエストにBranchYの変更差分表示されていました。
これはしんどい。
はい、これめちゃしんどいんです。
上記は例ですが、実際こんなに変更フィルが少なくなるはずもなく、まさにカオスです。
実際、かなりチームの生産性落ちます。これ。
解決方法
調査してみたら簡単でした。
「BranchXでMasterを追従する(pullする)」
はい、これだけです。
コードにするとこうなる。
# git checkout BranchX
# git pull origin master
# git push origin BranchX
簡単でしょ?
BranchXからMasterへのプルリクエストはこうなりました。

わーい。おしまい。