社内の開発チームでタイトルのような問題がでていた。
初めてきいた時はちょっと信じられず、かなり疑いました(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へのプルリクエストはこうなりました。
わーい。おしまい。