Posted at

Githubのプルリクエストで、マージ先ブランチに含まれている変更がプルリクエストの変更差分に表示されてしまう問題

More than 1 year has passed since last update.

社内の開発チームでタイトルのような問題がでていた。

初めてきいた時はちょっと信じられず、かなり疑いました(w)が、実際やってみるとほんとうにそのとおりでした。

この状態、下で図で説明していますが、コードレビュー時に致命的です。

なぜかというと、レビュー対象ではない変更差分が表示されるため、どれをレビューしていいか、まったくわからなくなるから。

まあ、ちょっとややこしいので図で説明する。


どういうことか?

こんなブランチで開発をしているとする。

これ自体はよくある形でしょう。

スクリーンショット 2017-06-17 14.08.34.png

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


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

スクリーンショット 2017-06-17 13.53.35.png


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

スクリーンショット 2017-06-17 13.54.09.png


BranchXの開発にBranchYの機能が必要になった

次にBranchXの開発中にBranchYの機能が必要になったため、

以下の図のようにBranchXにBranchYにマージした。

(え、それ開発スコープおかしくない?というツッコミはなしでw)

スクリーンショット 2017-06-17 14.10.17.png


BanchYの開発が終わったのMasterへマージをする

BranchYの開発完了(やった!テストコードあるかい?)したので、Masterブランチにマージしました。

よくある感じですね。

スクリーンショット 2017-06-17 14.15.23.png


BranchXの開発完了したので、コードレビューをするためのプルリクエストをみる。

ちなみに、今の状態は概念的にはこんな感じ。

スクリーンショット 2017-06-17 17.04.15.png

さあ、BranchXの開発が終ったので、チームにレビューをしてもらおう。

「ん??なんかレビュアーがざわついてる。。」

12.jpg

「レビューア」ん。。。なんかおかしくない?変更ファイル多くない?


BranchXからMasterのプルリクエストをみてみよう。

スクリーンショット 2017-06-17 13.55.52.png

そうです。BranchYの差分がでています。上記の概念図でも表していますが、

BranchYはすでにMasterブランチにマージされているのですが、

BranchXからMasterのプルリクエストにBranchYの変更差分表示されていました。


これはしんどい。

はい、これめちゃしんどいんです。

上記は例ですが、実際こんなに変更フィルが少なくなるはずもなく、まさにカオスです。

実際、かなりチームの生産性落ちます。これ。


解決方法

調査してみたら簡単でした。


「BranchXでMasterを追従する(pullする)」

はい、これだけです。

コードにするとこうなる。

# git checkout BranchX

# git pull origin master
# git push origin BranchX

簡単でしょ?

BranchXからMasterへのプルリクエストはこうなりました。

スクリーンショット 2017-06-17 13.53.35.png

わーい。おしまい。